我需要从字符串中替换一组字符,我无法控制字符串,因此我无法转义字符串中的+
符号。
所以我的问题是,如果我将我的价值改变为“繁殖”,那么这就是可行的。它确实取代了字符串。如何在不手动转义字符串的情况下转义字符串?我试过了
var s = "http://example.co/kb/tags/anazolic~racing~all+articles~breeding";
var value = 'all+articles';
var find = new RegExp('\~?\\b' + value + '\\b', 'g');
var l = s.replace(find, '');
console.log(l);
DEMO :http://jsfiddle.net/AnBc6/1/
我也尝试添加:value = encodeURIComponent(value);
,但这也无效。
任何帮助?
答案 0 :(得分:1)
将第三行更改为:
var find = new RegExp('\~?\\b' + value.replace(/\+/g,'\\+') + '\\b', 'g');
加号是正则表达式中的特殊字符,因此需要使用反斜杠进行转义。
(另外,我不确定你的意思是“存储在一个变量中。”JavaScript中的所有内容都是“在一个变量中。”或者你真的是说,“存储在一个RegExp对象中。”)
答案 1 :(得分:1)
所以,如果我理解正确,你想要逃避特殊的正则表达式字符。
value = value.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&');
您可以将其提取为函数:
function escapeRegex(value) {
return String(value).replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&');
}