正则表达式中特殊字符在.NET和JavaScript中的区别

7

我有一个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上的页面进行比较时,我发现了两个不同之处。

  1. 我已经包含了],但该页面没有包含。是不是真的我们不需要包括]?(显然,我不怀疑该页面,但由于我的实现是在JavaScript而不是C# / VB中..)

  2. 我错过了#。在JavaScript正则表达式中,#符号是否特殊?


2个回答

5

1) 我包含了 ] 但页面没有。我们不需要包含 ] 吗?(显然我不怀疑那个页面,但由于我的实现是在 javascript 而不是 c#/vb..)

] 只有在字符集内才需要转义。该列表还缺少需要在字符集内时转义的 -。例如,要创建一个包含空格、破折号和字母 A 的字符集,您需要转义 -,如下所示:/[ \-A]/ 或将破折号移到侧面:/[- A]/

在上述列出的字符中,只有 ]-^\\ 需要在字符集中进行转义。仅当 ^ 在字符集中且位于开头时,才需要在字符集内转义它。

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

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

不,# 在 JavaScript 中不是特殊字符。


2

请注意,您的函数可以简化为:

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

正如Mike Samuel指出的那样,此处不包括#,但包括]-


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接