尝试在JavaScript中使用Gruber的“改进” URL匹配的REGEXP模式时,如何修复“无效组”错误?
-
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
不隶属于 StackOverflow