JavaScript替换字符串中指定substring不生效该如何解决?
问题原因
- 首先
String.replace()方法如果第一个参数传入字符串,只会替换和该字符串完全匹配的首个子串。你拼接出的第一个参数是字符串"/0/",原字符串中不存在该内容,因此不会触发替换。 - 若要使用动态拼接的正则表达式,不能直接将正则规则写在普通字符串中,需要通过
RegExp构造函数创建正则实例,原写法的转义逻辑也完全错误。 - 即使正则写对,直接匹配字符
0很容易误替换其他参数中的0字符,缺少匹配范围限制。
解决方法
以下提供3种可行方案,你可以根据实际场景选择:
方案1:简单字符串替换(确定没有其他位置出现'0'时使用)
直接匹配带单引号的'0',避免误替换其他零散的0字符:
var str = "chat('star_comment','11211967','17','HF00008','MLR51101639100ICI100','B19','0','2020')"; const check = "0"; const res = str.replace(`'${check}'`, "'RO_RX'");
方案2:限定匹配位置的正则替换(避免误替换)
通过正则前瞻限定只匹配后面跟了, '2020'的'0',完全不会影响其他位置的内容:
var str = "chat('star_comment','11211967','17','HF00008','MLR51101639100ICI100','B19','0','2020')"; const check = "0"; const reg = new RegExp(`'${check}'(?=,'2020'\\))`) const res = str.replace(reg, "'RO_RX'");
方案3:参数拆分修改(最稳妥,无匹配失误风险)
直接把chat的参数拆成数组修改对应位置,再重新拼接,不管其他参数是什么都不会出错:
var str = "chat('star_comment','11211967','17','HF00008','MLR51101639100ICI100','B19','0','2020')"; const paramsStr = str.match(/chat\((.*)\)/)[1] const params = paramsStr.split(',') params[6] = "'RO_RX'" const res = `chat(${params.join(',')})`
内容的提问来源于stack exchange,提问作者Samiul
相关产品推荐
相关产品推荐

