试图让“完美的URL验证正则表达式”在ruby和javascript中运行

时间:2014-04-19 15:24:21

标签: javascript ruby regex

我正在寻找最好的正则表达式来检测文本中的网址。在尝试了很多之后,我遇到了this article,作者证明了他的正则表达式是许多人中最强大的。我试图让这个正则表达式在Ruby和Javascript中运行,但是Rubular和Regexpal都给了我错误。当我试图修复它们时,我没有得到任何匹配。对任何人的热爱都可以帮助我将这个正则表达式翻译成Ruby和Javascript兼容的版本。

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

3 个答案:

答案 0 :(得分:1)

<强>红宝石:

result = subject.scan(/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/)

<强>使用Javascript:

result = subject.match(/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/g);

在ruby和javascript中使用的“完美的URL验证正则表达式”可能是:

http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+

答案 1 :(得分:1)

你看过源了吗?嵌入了Ruby和JS端口:gist.github.com/dperini/729294

答案 2 :(得分:0)

DMKE最好地回答了我原来的问题,将我与一些我忽略的来源联系起来,所以我接受了他的回答。但在测试@ diegoperini的正则表达式后,我有点不知所措。我最终偶然发现了Daring Fireball上发现的以下正则表达式:

\ B((:[AZ] [\ W - ] +:(:(Ⅰ')?/ {1,3} | [A-Z0-9%])| WWW \ d {0,3 } | [A-Z0-9 .-] + [AZ] {2,4} /):[&LT;&GT;(^ \ S(+ |(([^ \ S [] [])〕 ()&LT;&GT;] + |(([^ \ S()&LT;&GT;] +)))))+(?:(([^ \ S()&LT;&GT;] + | (([^ \ S()&LT;&GT;] +))))| [^ \ s`()[] {} ;:'!”,&LT;&GT ;?«»‘’ '']))

它很自由,接受端口号,没有http:或www的链接,但仍设法通过我的测试。此外,它简单易读。因此,对于想要快速,自由的URL正则表达式的人,我会推荐这个正则表达式。