在放入RegEx之前应该转义的所有字符的列表?

时间:2011-02-24 13:13:55

标签: javascript regex escaping

有人可以提供一份应该转义的特殊字符的完整列表吗?

我担心我不了解其中的一些。

6 个答案:

答案 0 :(得分:65)

看看PHP.JS的PHP preg_quote函数的实现,该函数可以满足您的需求:

  

http://phpjs.org/functions/preg_quote:491

特殊正则表达式字符为:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

答案 1 :(得分:9)

根据this site,要转义的字符列表是

  

[,反斜杠\,插入符号^,美元符号$,句点或点。竖线或竖线符号|,问号?,星号或星号*,加号+,开头圆形支架(和闭合圆形支架)。

除此之外,您还需要将Javascript解释器解释的字符转义为字符串的结尾,即'"

答案 2 :(得分:4)

连字符( - )需要在方括号内转义,并且它不位于开头或结尾 例如 需要逃避 - 为

[a-z0-9\-_]+

无需逃避 -

[a-z0-9_-]+

答案 3 :(得分:3)

根据Tatu Ulmanen的回答,我在C#中的解决方案采用了以下形式:

private static List<string> RegexSpecialCharacters = new List<string>
{
    "\\",
    ".",
    "+",
    "*",
    "?",
    "[",
    "^",
    "]",
    "$",
    "(",
    ")",
    "{",
    "}",
    "=",
    "!",
    "<",
    ">",
    "|",
    ":",
    "-"
};


foreach (var rgxSpecialChar in RegexSpecialCharacters)
                rgxPattern = input.Replace(rgxSpecialChar, "\\" + rgxSpecialChar);

请注意,我已经切换了&#39; \&#39;并且&#39;。&#39;,未能首先处理斜杠会导致&#39;

的加倍。

答案 4 :(得分:0)

我正在寻找关于ESLint的reg-ex的“无用无法逃脱”设置的列表。并且发现提到的这些字符中的一些不需要为JS中的正则表达式进行转义。另一个答案中较长的列表是针对PHP的,它需要转义其他字符。

this github issue for ESLint,大约一半的时间内,用户not-an-aardvark解释了为什么问题中引用的字符是应该转义的字符。

在javascript中,需要转义的字符是syntax character,或其中之一:

^ $ \ . * + ? ( ) [ ] { } |

我对上面链接的github问题的回应包括对“附件B”语义(我不太了解)的解释,它允许上面提到的4个字符为UNescaped:) ] { }。< / p>

另外需要注意的是,转义不需要转义的字符不会造成任何伤害(除非你试图逃避转义字符)。所以,我个人的经验法则是:“当有疑问时,逃避”

答案 5 :(得分:0)

问题:

const character = '+'
new RegExp(character, 'gi') // error

智能解决方案:

// with babel-polyfill
// Warning: will be removed from babel-polyfill v7
const character = '+'
const escapeCharacter = RegExp.escape(character)
new RegExp(escapeCharacter, 'gi') // /\+/gi

// ES5
const character = '+'
const escapeCharacter = escapeRegExp(character)
new RegExp(escapeCharacter, 'gi') // /\+/gi

function escapeRegExp(string){
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}