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('')
)。