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支持的元字符列表要短得多。