JavaScript字符串多词替换问题:RegExp全局替换失效求助
问题原因及解决方案
嘿,我一眼就瞅出问题出在哪了——你没处理正则里的特殊字符!
在正则表达式里,$是个特殊的元字符,它的作用是匹配字符串的结尾位置,而不是字面意义上的美元符号。你直接写"$times"作为正则模式的话,引擎会把$当成规则符号,而不是你要匹配的$字符,自然找不到模板里的$times啦。
修正方案
有两种简单的解决办法:
方法1:转义字符串里的$
因为在JS字符串中,要表示一个反斜杠\需要写两个\\,所以我们把$转义成\\$,让正则引擎把它当成字面量处理:
var _tpl = "time working $times, not now $times" var reg = "\\$times" // 转义$符号 var regexp = new RegExp(reg, "g") var replaceFor = 1 var _newTpl = _tpl.replace(regexp, replaceFor) console.log(_newTpl) // 输出:time working 1, not now 1
方法2:使用正则字面量(更推荐)
用正则字面量的写法时,只需要加一个反斜杠转义$就行,不用处理字符串的双重转义,更直观:
var _tpl = "time working $times, not now $times" var regexp = /\$times/g // 直接转义$ var replaceFor = 1 var _newTpl = _tpl.replace(regexp, replaceFor) console.log(_newTpl)
这两种方法都能让正则正确匹配到所有的$times,然后完成全局替换~
内容的提问来源于stack exchange,提问作者Dante Cervantes
相关产品推荐
相关产品推荐

