转义字符串在Javascript正则表达式中使用
可能重复:
Javascript中有RegExp.escape函数吗?
我正在尝试基于用户输入构建一个javascript正则表达式:
function FindString(input) { var reg = new RegExp('' + input + ''); // [snip] perform search }
但是,当用户输入包含一个正则表达式时,正则表达式将无法正常工作?
或*
因为它们被解释为正则表达式特殊项。 事实上,如果用户放置一个不平衡的(
或[
在他们的字符串中,正则表达式甚至不是有效的。
什么是JavaScript函数来正确地转义所有特殊字符在正则表达式中使用?
简短甜美
function escapeRegExp(str) {
return str.replace(/[-[]/{}()*+?.^$|]/g, "$&");
}
例
escapeRegExp("All of these should be escaped: ^ $ * + ? . ( ) | { } [ ]");
>>> "All of these should be escaped: ^ $ * + ? . ( ) | { } [ ] "
安装
在npm上作为escape-string-regexp可用
npm install --save escape-string-regexp
注意
请参阅MDN:Javascript指南:正则表达式
其他符号(〜`!@#...)可以无后果地逃脱,但不是必须的。
。
。
。
。
测试用例:一个典型的网址
escapeRegExp("/path/to/resource.html?search=query");
>>> "/path/to/resource.html?search=query"
长答案
如果你打算使用上面的函数,至少在代码的文档中链接到这个堆栈溢出文章,这样它看起来不像疯了似的难以测试的巫术。
var escapeRegExp;
(function () {
// Referring to the table here:
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp
// these characters should be escaped
// ^ $ * + ? . ( ) | { } [ ]
// These characters only have special meaning inside of brackets
// they do not need to be escaped, but they MAY be escaped
// without any adverse effects (to the best of my knowledge and casual testing)
// : ! , =
// my test "~!@#$%^&*(){}[]`/=?+|-_;:'",<.>".match(/[#]/g)
var specials = [
// order matters for these
"-"
, "["
, "]"
// order doesn't matter for any of these
, "/"
, "{"
, "}"
, "("
, ")"
, "*"
, "+"
, "?"
, "."
, ""
, "^"
, "$"
, "|"
]
// I choose to escape every character with ''
// even though only some strictly require it when inside of []
, regex = RegExp('[' + specials.join('') + ']', 'g')
;
escapeRegExp = function (str) {
return str.replace(regex, "$&");
};
// test escapeRegExp("/path/to/res?search=this.that")
}());
链接地址: http://www.djcxy.com/p/76813.html