C#和JavaScript正则表达式之间的差异?

时间:2010-10-20 21:46:03

标签: c# javascript .net regex

C#和JavaScript正则表达式有何不同?

是否有这些差异的清单?

2 个答案:

答案 0 :(得分:3)

这是我们碰到的一个区别,我没有在任何地方看到过记录,所以我会发布它和解决方案,希望它能帮助某人。

我们使用“[A-Z- [QVX]]”语法测试“一些但不是全部”字符类,例如“A到Z但不是Q,V或X”。不知道我们在哪里发现它,不知道它是否有记录,但它在.Net中有效。

例如,在Powershell中,使用.Net regex类,

[regex]::ismatch("K", "^[A-Z-[QVX]]$") 

返回true。在JavaScript中测试相同的输入和模式,它返回false,但在JavaScript中对“^ [A-Z] $”测试“K”,它返回true。

你可以使用更正统的负向前瞻方法来表达“A到Z但不是Q,V或X”,例如“^(?![QVX])[AZ] $”,这将在Powershell中起作用和(现代)JavaScript。

鉴于Ben Atkin关于IE6和IE7不支持前瞻的观点,可能是以傻瓜式(或IE7证明)方式执行此操作的唯一方法是扩展表达式,例如“[AZ- [QVX]“ - > “ABCDEFGHIJKLMNOPRSTUWYZ”。哎哟。

答案 1 :(得分:2)

首先,一些资源:

以下是一些差异:

  • IE6和IE7不支持Lookahead。 (在MDC指南中搜索x(?=y)以获取示例。)
  • JavaScript不支持命名捕获组。示例:(?<foo>)
  • JavaScript支持的元字符列表要短得多。