正则表达式中特殊字符的差异:.NET vs JavaScript

differences of special characters in regex: .net vs javascript

本文关键字:NET vs JavaScript 特殊字符 正则表达式      更新时间:2023-09-26

我在javascript中有这个实现:

EscapeForRegex = function(input) {
        var specials = ["[", "''", "^", "$", ".", "|", "?", "*", "+", "(", ")", "{", "}"]
        for (var k in specials) {
            var special = specials[k];
            input = input.replace(new window.RegExp("''" + special, "g"), "''" + special);
        }
        return input;
    };

但是,当我将我的实现与 http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx 的页面进行比较时,我发现了 2 个差异。

  1. 我已经包含了 ],但页面没有这样做。 我们真的不必包含 ] 吗?(显然我不怀疑那个页面,但是因为我的实现是用javascript而不是c#/vb。

  2. 我错过了#。 #符号在javascript正则表达式中很特殊吗?

1)我已经包含了],但页面没有这样做。我们真的不必包括 ] 吗?(显然我不怀疑那个页面,但是因为我的实现是用javascript而不是c#/vb。

]只需在字符集中进行转义。 该列表也缺少有时需要在字符集中转义-。 例如,要创建包含字符空格、破折号和字母 A 的字符集,您需要转义-/[ '-A]/或将破折号移到一侧:/[- A]/

在上面列出的字符中,只有 ]-^'' 需要在字符集中进行转义。 ^只有在字符集中和开头时,才需要在字符集内进行转义。

如果要在文字形式中包含正则表达式文本,/.../而不是new RegExp("...")还需要转义行终止符字符:代码点 U+000A、U+000D、U+2028、U+2029 和字符集外部的/字符。

2)我错过了#。# 符号在 JavaScript 正则表达式中很特殊吗?

不,#在 JavaScript 中并不特别。

仅供参考,您的函数可以简化为:

function EscapeForRegex(input){
    return input.replace(/[(-.]|[$?[']''^|{}]/g, '''$&');
}

它不包括#,并且确实包括]-,正如迈克塞缪尔所指出的。