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


Answers:



9

根据此站点,要转义的字符列表为

[,反斜杠\,脱字号^,美元符号$,句点或点。,竖线或竖线符号|,问号?,星号或星号*,加号+,左括号(和右圆括号)。

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


Dunno该网站的特色。它涵盖了RegEx的很多风格,并且未指定此列表适用于哪种风格。
BaldEagle '16

4

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

[a-z0-9\-_]+

但这并不需要在这里转义:

[a-z0-9_-]+

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

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

const pattern = /[/]/;

4

基于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))

2
OP不会要求JS吗?
Jamie Hutber '04

@JamieHutber他们去了
hngr18 '20

解释它:d他们,因为他们的编辑标签,然后
杰米Hutber

0

我正在寻找有关ESLint的reg-ex的“ no-useless-escape”设置的列表。并发现其中提到的某些字符不需要在JS中进行正则表达式转义。另一个答案中的较长列表是针对PHP的,它确实需要转义其他字符。

此ESLint的github问题中,大约一半not-an-aardvark解释了为什么问题中引用的字符是一个应该转义的字符。

在javascript中,需要转义的字符语法字符或以下之一:

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

我上面链接到的github问题的响应包括对“附件B”语义的解释(我不太了解),该语义允许上述4个字符不转义: ) ] { }

要注意的另一件事是,转义不需要转义的字符不会造成任何伤害(除非您尝试转义转义字符,否则可能会造成伤害)。因此,我个人的经验法则是:“如有疑问,请逃脱”


“转义不需要转义的字符不会造成任何伤害”不幸的是,这不再适用,至少<input pattern="">在Firefox中如此: stackoverflow.com/questions/36953775/…–
nrkn

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, '\\$&')
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.