有人可以提供一份应该转义的特殊字符的完整列表吗?
我担心我不了解其中的一些。
答案 0 :(得分:65)
看看PHP.JS的PHP preg_quote
函数的实现,该函数可以满足您的需求:
特殊正则表达式字符为:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
答案 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, '\\$&')
}