正则表达式中特殊字符的差异:.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的主要内容,如果未能解决你的问题,请参考以下文章