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

Posted

技术标签:

【中文标题】正则表达式中特殊字符的差异:.net vs javascript【英文标题】:differences of special characters in regex: .net vs javascript 【发布时间】:2011-08-20 21:44:45 【问题描述】:

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

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

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

【问题讨论】:

请看“Should 'Hi', 'thanks' and taglines and salutations be removed from posts?” 【参考方案1】:

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 所指出的那样。

【讨论】:

以上是关于正则表达式中特殊字符的差异:.net vs javascript的主要内容,如果未能解决你的问题,请参考以下文章

nodepad++通过正则表达式,删除带有特殊字符的某一行

正则表达式仅允许某些特殊字符并限制下划线

接上篇--.NET高级技术之正则表达式

用于检查 4 个不同字符组中的至少 3 个的正则表达式

正则表达式,re模块

正则表达式