转义字符串字符而不手动转义它们

时间:2014-07-17 22:44:46

标签: javascript jquery regex string replace

我需要从字符串中替换一组字符,我无法控制字符串,因此我无法转义字符串中的+符号。

所以我的问题是,如果我将我的价值改变为“繁殖”,那么这就是可行的。它确实取代了字符串。如何在不手动转义字符串的情况下转义字符串?我试过了

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);,但这也无效。

任何帮助?

2 个答案:

答案 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, '\\$&');
}