C#和JavaScript正则表达式之间的区别?

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

有这些差异的清单吗?

如果有任何网站可以给出答案,那就是www.regular-expressions.info

  • Javascript: http : //www.regular-expressions.info/javascript.html
  • C#: http : //www.regular-expressions.info/dotnet.html

我注意到维基百科中现在有正则表达式引擎的比较。 目前只有几个信息表,但可能对某些人有用: 正则表达式引擎的比较

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

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

例如,在Powershell中,使用.Net正则表达式类,

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

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

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

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

首先,一些资源:

  • Mozilla开发中心JavaScript指南:正则表达式
  • .NET Framework正则表达式 – 请参阅页面底部的链接

以下是一些差异:

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