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

Som*_*ody 65 javascript regex escaping

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

我担心我不知道其中的一些.

Tat*_*nen 67

看一下PHP.JS的PHP preg_quote函数实现,它应该做你需要的:

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

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

  • 如果你使用str_replace转义它们,你应该首先转义\.在上面的列表中,如果是.替换为\.,\.然后将替换为\\.,这不是想要的. (2认同)

And*_*rea 9

根据这个网站,要逃避的字符列表是

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

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


小智 5

在字符集中,为了匹配文字连字符-,当它不位于开头或结尾时,需要对其进行转义。例如,给定以下模式中最后一个连字符的位置,需要对其进行转义:

[a-z0-9\-_]+
Run Code Online (Sandbox Code Playgroud)

但这里不需要转义:

[a-z0-9_-]+
Run Code Online (Sandbox Code Playgroud)

如果无法转义连字符,引擎将尝试将其解释为前一个字符和下一个字符之间的范围(就像a-z匹配 a 和 z 之间的任何字符一样)。

此外,/s 不会在字符集内转义(尽管它们在字符集外确实需要转义)。因此,以下语法是有效的;

const pattern = /[/]/;
Run Code Online (Sandbox Code Playgroud)


hng*_*r18 5

基于 Tatu Ulmanen 的回答,我在 C# 中的解决方案采用了这种形式:

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


foreach (var rgxSpecialChar in RegexSpecialCharacters)
                rgxPattern = input.Replace(rgxSpecialChar, "\\" + rgxSpecialChar);
Run Code Online (Sandbox Code Playgroud)

请注意,我已经切换了 '\' 和 '.' 的位置,如果不先处理斜杠,则会导致 '\'s 加倍

编辑

这是一个javascript翻译

var regexSpecialCharacters = [
    "\\", ".", "+", "*", "?",
    "[", "^", "]", "$", "(",
    ")", "{", "}", "=", "!",
    "<", ">", "|", ":", "-"
];

regexSpecialCharacters.forEach(rgxSpecChar => 
    input = input.replace(new RegExp("\\" + rgxSpecChar,"gm"), "\\" + 
rgxSpecChar))
Run Code Online (Sandbox Code Playgroud)

  • OP不是要求JS吗? (2认同)