Tat*_*nen 67
看一下PHP.JS的PHP preg_quote函数实现,它应该做你需要的:
特殊的正则表达式字符是: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
小智 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)
基于 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)
| 归档时间: |
|
| 查看次数: |
51098 次 |
| 最近记录: |