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

Pac*_*ier 7 .net javascript c# regex vb.net

我在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;
    };
Run Code Online (Sandbox Code Playgroud)

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

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

  2. 我错过了#.是javascript正则表达式中的#符号特殊?

Mik*_*uel 5

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

]只需要在字符集中进行转义.该列表也缺失-,有时需要在字符集中进行转义.例如,要创建一个包含字符空格,短划线和字母A的字符集,您需要将其转义-:/[ \-A]/或者将短划线移到侧面:/[- A]/.

你上面列出的人物,只是],-,^,和\\以往任何时候都需要的字符集进行转义. ^只有在字符集和开头的字符集中才需要进行转义.

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

2)我错过了#.是javascript正则表达式中的#符号特殊?

不,#在JavaScript中并不特别.