C# 和 JavaScript 的正则表达式有所不同吗?
是否有这些差异的列表?
C# 和 JavaScript 的正则表达式有所不同吗?
是否有这些差异的列表?
这里有一个我们遇到的差异,在任何地方都没有看到过记录,所以我将在这里发布它及其解决方案,希望能帮助到某些人。
我们正在测试“一些但不是全部”字符类,例如“A到Z但不包括Q、V或X”,使用“[A-Z-[QVX]]”语法。不知道我们是从哪里找到的,也不知道是否有记录,但它在.Net中可以工作。
例如,在Powershell中,使用.Net正则表达式类:
[regex]::ismatch("K", "^[A-Z-[QVX]]$")
返回true。在JavaScript中测试相同的输入和模式,它返回false,但是在JavaScript中使用“K”测试“ ^ [A-Z] $”,它返回true。
您可以使用更传统的负向先行断言方法来表示“从A到Z,但不包括Q、V或X”,例如“ ^(?![QVX])[A-Z] $”,这将在PowerShell和(现代)JavaScript中都起作用。
鉴于Ben Atkin关于IE6和IE7不支持前瞻的观点,也许在一个无懈可击的(或IE7-proof)方式中执行此操作的唯一方法是扩展表达式,例如“[A-Z-[QVX]”->“ABCDEFGHIJKLMNOPRSTUWYZ”。痛苦。
首先,一些资源:
以下是一些区别:
x(?=y)
以获取示例。)(?<foo>)