如何在JavaScript中将{0}定义为正则?动态正则匹配失效求助
解决JavaScript动态创建正则匹配{0}这类占位符的问题
你遇到的问题是因为使用RegExp构造函数时的写法有误,咱们一步步拆解并修正:
问题出在哪?
你写的这段代码有两个关键错误:
new RegExp("/\\{"+i+"\\}/g")
- 不该把正则字面量的
/写进模式字符串:RegExp构造函数的第一个参数是纯正则模式文本,不需要像字面量那样用/包裹 - 全局标志
g要单独传参:g是正则的修饰符,应该作为构造函数的第二个参数传递,而不是混在模式字符串里
另外还有个小细节:你循环里用了row.cells[0].innerText,这会把所有占位符都替换成第一个单元格的内容,应该改成row.cells[i].innerText才对哦。
修正后的代码
用模板字符串来拼接模式会更清晰,也可以用传统字符串拼接:
for (let i = 0; i < row.cells.length; i++) { // 模板字符串写法,自动处理部分转义(这里仍需转义\) const placeholderRegex = new RegExp(`\\{${i}\\}`, 'g'); // 替换对应位置的占位符,注意用row.cells[i]匹配当前循环的索引 temp = temp.replace(placeholderRegex, row.cells[i].innerText); // 如果需要把文本转成数字,保留+即可:+row.cells[i].innerText }
补充说明
- 为什么要写
\\{和\\}?因为在字符串中,\本身是转义字符,所以要表示正则里的\,得写成\\;而正则里{是量词的起始符号,要匹配字面量的{,必须用\{转义,所以最终在字符串里就是\\{ - 如果你习惯用正则字面量,动态场景下只能通过构造函数创建,因为字面量里不能插入变量
- 用
let声明循环变量i,避免污染全局作用域
内容的提问来源于stack exchange,提问作者Sandeep Bhardwaj
相关产品推荐
相关产品推荐

