javascript - 尝试在 JavaScript 中使用 Gruber 的 "invalid group"URL 匹配正则表达式模式时,如何修复 "improved"错误?

标签 javascript regex gruber

我正在尝试整合 John Gruber 的 An Improved Liberal, Accurate Regex Pattern for Matching URLs进入我的一个 Javascripts,但 WebKit 的检查器(在适用于 Mac 的 Google Chrome 5.0.375.125 中)给出了“无效组”正则表达式语法错误。

Gruber 的原始正则表达式如下:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

我的 JavaScript 中带有正则表达式的行如下(带有正斜杠反斜杠转义):

tweet_text = tweet_text.replace(/(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi, '<a href="$1">$1</a>');

而谷歌浏览器(V8?)错误如下:

Uncaught SyntaxError: Invalid regular expression: /(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/: Invalid group

而Safari报错如下:

SyntaxError: Invalid regular expression: unrecognized character after (?

他声称它应该在现代 JavaScript 正则表达式解释器中工作,我认为 WebKit 和 V8 会是这样。 JavaScript 的正则表达式语法是否不支持 (?:(该死的 Google 不索引标点符号!)分组语法?我只是错过了转义吗?

最佳答案

啊,它是正则表达式开头的模式修饰符(即(?i))!

我经历了Regular-Expressions.info's datails on "JavaScript's Regular Expression Flavor" ,特别是支持的列表,还有“模式修饰符”,我已经在正则表达式的结束正斜杠之后指定了它。撕掉它,一切似乎都很好。

所以,我的 JavaScript 正则表达式现在如下所示:

/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi

关于javascript - 尝试在 JavaScript 中使用 Gruber 的 "invalid group"URL 匹配正则表达式模式时,如何修复 "improved"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559113/

相关文章:

javascript - 获取错误 :unable to execute js call:_fbBatchedBridge is undefined while executing in simulator

javascript - 如何使用 Mongoose 将两个元素分组?

php - 在 PHP 中使用 Gruber 的正则表达式进行网址匹配

javascript - 将标签放在文本输入中 - 在 IE7 中不起作用

javascript - React 组件之间的紧密耦合

c# - 正则表达式匹配有效的十六进制字符串但不是全部 '0'

html - 使用 QRegExp 从 html 字符串中提取 href 值

python - 处理正则表达式中的特殊字符

python - Gruber 的 Python URL 正则表达式