有人可以提供应该转义的特殊字符的完整列表吗?
我担心我不认识其中一些人。
Answers:
看一下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))
我正在寻找有关ESLint的reg-ex的“ no-useless-escape”设置的列表。并发现其中提到的某些字符不需要在JS中进行正则表达式转义。另一个答案中的较长列表是针对PHP的,它确实需要转义其他字符。
在此ESLint的github问题中,大约一半not-an-aardvark
解释了为什么问题中引用的字符是一个应该转义的字符。
在javascript中,需要转义的字符是语法字符或以下之一:
^ $ \ . * + ? ( ) [ ] { } |
我上面链接到的github问题的响应包括对“附件B”语义的解释(我不太了解),该语义允许上述4个字符不转义: ) ] { }
。
要注意的另一件事是,转义不需要转义的字符不会造成任何伤害(除非您尝试转义转义字符,否则可能会造成伤害)。因此,我个人的经验法则是:“如有疑问,请逃脱”
<input pattern="">
在Firefox中如此: stackoverflow.com/questions/36953775/…–
问题:
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, '\\$&')
}