有人可以提供应该转义的特殊字符的完整列表吗?
我怕我不认识他们中的一些人。
有人可以提供应该转义的特殊字符的完整列表吗?
我怕我不认识他们中的一些人。
看看 PHP.JS 对 PHPpreg_quote
函数的实现,它应该可以满足您的需求:
特殊的正则表达式字符是: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
根据这个站点,要转义的字符列表是
[、反斜杠 \、插入符号 ^、美元符号 $、句点或点 .、竖线或竖线符号 |、问号 ?、星号或星号 *、加号 +、开始的圆括号 (和结束圆括号)。
除此之外,您需要转义由 Javascript 解释器解释为字符串结尾的字符,即'
或"
。
基于 Tatu Ulmanen 的回答,我在 C# 中的解决方案采用了以下形式:
private static List<string> RegexSpecialCharacters = new List<string>
{
"\\",
".",
"+",
"*",
"?",
"[",
"^",
"]",
"$",
"(",
")",
"{",
"}",
"=",
"!",
"<",
">",
"|",
":",
"-"
};
foreach (var rgxSpecialChar in RegexSpecialCharacters)
rgxPattern = input.Replace(rgxSpecialChar, "\\" + rgxSpecialChar);
请注意,我已经切换了 '\' 和 '.' 的位置,如果不先处理斜杠,则会导致 '\' 的加倍
编辑
这是一个javascript翻译
var regexSpecialCharacters = [
"\\", ".", "+", "*", "?",
"[", "^", "]", "$", "(",
")", "{", "}", "=", "!",
"<", ">", "|", ":", "-"
];
regexSpecialCharacters.forEach(rgxSpecChar =>
input = input.replace(new RegExp("\\" + rgxSpecChar,"gm"), "\\" +
rgxSpecChar))
在字符集中,要匹配文字 hyphen -
,它需要在未定位在开头或结尾时进行转义。例如,给定以下模式中最后一个连字符的位置,需要对其进行转义:
[a-z0-9\-_]+
但是这里不需要转义:
[a-z0-9_-]+
如果连字符转义失败,引擎将尝试将其解释为前一个字符和下一个字符之间的范围(就像a-z
匹配 a 和 z 之间的任何字符一样)。
此外,/
s 不会在字符集内转义(尽管在字符集外时它们确实需要转义)。因此,以下语法是有效的;
const pattern = /[/]/;
我正在寻找有关 ESLint 为 reg-ex 设置的“no-useless-escape”设置的列表。并发现其中一些提到的字符不需要为 JS 中的正则表达式进行转义。此处另一个答案中较长的列表适用于 PHP,它确实需要对附加字符进行转义。
在这个 ESLint 的 github 问题中,大约一半,用户not-an-aardvark
解释了为什么问题中引用的字符是一个应该被转义的字符。
在 javascript 中,需要转义的字符是语法字符,或以下之一:
^ $ \ . * + ? ( ) [ ] { } |
对我上面链接的 github 问题的响应包括对“Annex B”语义(我不太了解)的解释,它允许对上述字符中的 4 个进行非转义: ) ] { }
.
另一件要注意的事情是,转义不需要转义的字符不会造成任何伤害(除非您试图转义转义字符)。所以,我个人的经验法则是:“有疑问时,逃避”