尝试在JavaScript中使用Gruber的“改进” URL匹配的REGEXP模式时,如何修复“无效组”错误?

StackOverflow https://stackoverflow.com/questions/3559113

  •  01-10-2019
  •  | 
  •  

我正在尝试整合约翰·格鲁伯的 改进的匹配URL的自由主义,准确的正则态度模式 进入我的JavaScript之一,但是Webkit的Inspector(在Google Chrome 5.0.375.125中为Mac)给出了“无效的组”正则表达语法错误。

Gruber的原始REGEXP如下:

(?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的线w/regexp如下(w/forward slashes backslash-escaped):

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>');

和Google Chrome(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 Regexp口译员中起作用,我认为Webkit&V8会。 JavaScript的REGEXP语法不支持 (?: (该死的Google没有索引标点符号!)分组语法?我只是想念逃脱的东西吗?

有帮助吗?

解决方案

gah,那是 模式修饰符 (即 (?i))在正则一开始!

我经历了 常规表达式。info的datail关于“ JavaScript的正则表达味”, ,特别是什么 不是 受支持,并且有“模式修饰符”,我已经在正则斜线的前向斜线后已经指定了它。将其撕掉了似乎很好。

因此,我的JavaScript Regex现在如下:

/\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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top