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

Mic*_*tum 18 .net javascript c# regex

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

有这些差异的清单吗?

Fra*_*ton 6

这是我们遇到的一个差异,我在任何地方都没有看到记录,所以我将在这里发布它和解决方案,希望它能对某人有所帮助。

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

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

[regex]::ismatch("K", "^[A-Z-[QVX]]$") 
Run Code Online (Sandbox Code Playgroud)

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

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

鉴于 Ben Atkin 上面关于 IE6 和 IE7 不支持前瞻的观点,以万无一失(或防 IE7)的方式做到这一点的唯一方法可能是扩展表达式,例如“[AZ-[QVX] ” -> “ABCDEFGHIJKLMNOPRSTUWYZ”。哎哟。

  • 那么 [A-PR-UWYZ] 就足够了,不是吗? (5认同)

Ben*_*kin 3

首先,一些资源:

以下是一些差异:

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