我在这个网站上找到了一个非常好的 URL 正则表达式匹配器:http: //daringfireball.net/2010/07/improved_regex_for_matching_urls。它声明它是免费使用的,并且它是跨语言兼容的(包括 Javascript)。首先,我必须避开一些斜线才能让它完全编译。当我这样做时,它在 Rubular.com 上运行良好(我通常在那里测试正则表达式),奇怪的副作用是每个匹配有 5 个字段:1 是 url,额外的 4 是空的。当我把它放在 JS 中时,我收到错误“无效组”。如果这有什么不同,我正在使用 Node.js,但我希望我能理解这个错误。我想减少不必要的空匹配字段,但我什至不知道从哪里开始诊断这个野兽。这是我逃跑后的样子:
(?xi)\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`!()\[\]{};:'".,<>?«»“”‘’] ))