JS正则replace方法中如何动态绑定变量设置正则量词数值
问题原因
JS的正则字面量(即/pattern/写法)是在脚本解析阶段就完成编译的,不支持在字面量内部直接嵌入变量。你之前写的/^(\d{0,code.length})(\d{0,2})/中,code.length不会被识别为变量做值替换,只会被当做正则规则的普通字符部分解析,自然无法达到动态配置长度的效果。
实现方法
使用RegExp构造函数动态生成正则实例即可,注意构造函数接收字符串格式的正则规则时,正则里的转义反斜杠需要写双反斜杠(因为字符串本身的\是转义字符)。
示例代码:
// 你要动态传入的长度值,这里直接替换成你的配置变量即可 const dynamicLen = code.length; // 拼接正则规则字符串生成正则实例 const matchReg = new RegExp(`^(\\d{0,${dynamicLen}})(\\d{0,2})`); // 正常调用replace方法 yourStr.replace(matchReg, '($1) $2');
注意事项
- 如果需要给正则加匹配修饰符(比如全局匹配
g、忽略大小写i、多行匹配m),直接作为第二个参数传入RegExp即可,例如:new RegExp(^(\d{0,${dynamicLen}})(\d{0,2}), 'g') - 所有正则里的转义元字符在拼接字符串时都要做双重转义,比如
\d写为\\d、\w写为\\w、\s写为\\s,否则字符串解析时会丢失反斜杠,导致生成的正则不符合预期。
内容的提问来源于stack exchange,提问作者Stanley Mohlala
相关产品推荐
相关产品推荐

