我从 Daring Fireball 中获取了 Liberal URL Regex,将它与Alan Storm 的一些改进合并,并设法修复了一些错误,例如支持括号内的 IDN 字符。这就是我所拥有的:
/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
但是我遇到了一个我无法解决的错误:
'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'
上面的 URL 被识别为www.dsd(sd)sdsd.com'
(or www.dsd.com/whatever(whatever)'
) 而不是www.dsd(sd)sdsd.com
(or www.dsd.com/whatever(whatever)
)。这似乎只在 URL 有括号时发生,因为以下 URL:
'www.sampleurl.com'
被正确识别为www.sampleurl.com
.
我认为当 URL 有括号时,正则表达式的[^[:punct:]\s]|\/
一部分没有被执行,我已经尝试了一段时间,但似乎找不到解决方案。谁能帮我?
对于商品,我用正则表达式和一些测试数据设置了一个Rubular 永久链接(最后一个 URL 失败)。
我认为 Gruber 的正则表达式有点匆忙,例如它与 URL 不匹配,例如:
http://en.wikipedia.org/wiki/Something_(Special)_For_You
看到Gruber和Alan都错过了这个非常简单的错字,我更加印象深刻:
\([\w\d]+\)
还\(\w+\)
不够吗?:S