javascript - RegExp 构造函数向模式添加意外逗号

trigoOperators 是一个包含一些三角运算的数组。

目标是创建一个将字符串方程解析为数组的正则表达式。

问题是生成的正则表达式在模式中添加了意外的逗号,如下例所示

const trigoOperators = ['abs', 'sqrt']

const rexExp = new RegExp('\\W|(-?\\d+)' + `${(trigoOperators.map(o => `|(${o})`))}`, 'g')

console.log(rexExp)

预期结果是 /\W|(-?\d+)|(abs)|(sqrt)/g 而当前结果是 /\W|(-?\d+)|(abs),|(sqrt)/g (注意添加的逗号)

回答1

.map() 方法返回一个数组。当模板扩展扩展它时,它将 .join() 它变成一个字符串。这就是逗号的来源。您可以覆盖默认的 .join() 字符串:

const trigoOperators = ['abs', 'sqrt']

const rexExp = new RegExp('\\W|(-?\\d+)' + `${(trigoOperators.map(o => `|(${o})`)).join('')}`, 'g')

console.log(rexExp)

回答2

出现逗号是因为数组被强制转换为字符串。

您可以使用

const trigoOperators = ['abs', 'sqrt']
const rexExp = new RegExp(String.raw`\W|(-?\d+)${trigoOperators.map(o=>`|(${o})`).join('')}`, 'g')
console.log(rexExp) // => /\W|(-?\d+)|(abs)|(sqrt)/g

细节:

  • String.raw... - 原始字符串文字的定义,其中反斜杠被视为文字
  • ${trigoOperators.map(o=>`|(${o})`).join('')} - 获取 trigoOperators 数组中的每个项目,用 |() 字符包装它们,然后连接项目(使用 .join(''))。

相似文章

随机推荐

最新文章