如何在以下代码中将“?test = 666& test”替换为“222”?
如果我的代码有“?”或“&”,它将无效。
<body>
hello
<br>
?test=666&test
<script>
function rp (str, map) {
for (var i in map) {
str = str.replace(new RegExp(i, 'g'), map[i]);
}
return str;
}
document.body.innerHTML = rp(document.body.innerHTML, {
'hello': '111',
'?test=666&test': '222'
});
</script>
</body>
答案 0 :(得分:0)
?
和&
以及其他几个字符在正则表达式中具有特殊含义。你需要逃避它们(用\
)来逐字地使用它们。
This question's answers描述了在一般情况下这样做。
使用从这些答案派生的假设escapeRegex
函数,您可以:
str = str.replace(new RegExp(escapeRegex(i), 'g'), map[i]);
只需处理?
和&
,你就可以这样做(但不要这样做,它会打开大门对于其他特殊字符):
str = str.replace(new RegExp(i.replace(/[?&]/g, "\\$&")., 'g'), map[i]);
答案 1 :(得分:0)
您需要以各种不同的方式处理转义和编码:
?
是修饰符。您需要将其转义并使用\?
代替。\
是一个特殊字符。要在字符串中获得单反斜杠,您需要编写'\\'
,并在字符串中获取\?
,您需要编写'\\?'
&
会转换为&
。要匹配该编码字符,您需要查找&
这是您应该使用的结果:
function rp(str, map) {
for (var i in map) {
str = str.replace(new RegExp(i, 'g'), map[i]);
}
return str;
}
document.body.innerHTML = rp(document.body.innerHTML, {
'hello': '111',
'\\?test=666&test': '222'
});
<body>
hello
<br>
?test=666&test
</body>