将 c# 正则表达式转换为 javascript 正则表达式
Posted
技术标签:
【中文标题】将 c# 正则表达式转换为 javascript 正则表达式【英文标题】:Convert c# regex to javascript regex 【发布时间】:2011-10-02 16:47:18 【问题描述】:使用 C# reg ex 可以使用以下正则表达式:
^(?<survey>#_surveyForm.+)|#(?:(?<url>http.+\.\w3,4).+_surveyForm=\w+)$
匹配字符串如:
#http://localhost/tableaux-p145717.htm=&_surveyForm=second
或
#_surveyForm=second
我使用命名捕获组。
我知道 javascript 没有利用命名捕获组(而是使用 \1、\2 等)。此外语法与上面的略有不同。
我怎样才能使 reg ex 符合 javascript 标准?
提前致谢,
R.
【问题讨论】:
【参考方案1】:如您所说,JavaScript 不支持命名捕获。您必须将它们更改为“正常”捕获组,并按编号而不是按名称引用它们:
/^(#_surveyForm.+)|#(?:(http.+\.\w3,4).+_surveyForm=\w+)$/
您还应该知道\w
仅匹配 JavaScript 中的 ASCII 字母数字,而它匹配 .NET 中的 Unicode alnums。
【讨论】:
【参考方案2】:你可以使用类似的东西:
/^#(http.+.\w3,4.+)?_surveyForm=(\w+)$/
您的 URL 将在第一个捕获组中,调查在第二个中。
这个表达式可能更适合你:
/^#(https?:\/\/\S*)?\b_surveyForm=(\w+)$/
【讨论】:
以上是关于将 c# 正则表达式转换为 javascript 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式 - 将 C# 正则表达式转换为 JavaScript 正则表达式的量词的目标无效
Swift 将 javascript 正则表达式转换为 ios 正则表达式