2011-04-06 173 views
1

我需要一个正则表达式的JavaScript,将从“Hello we are jones.com/ca in Tampa”得到“jones.com/ca”。 “jones.com/ca”可以是任何网址扩展名(例如:.net,.co,.gov等)和任何名称。所以正则表达式需要找到所有说“.com”的实例,并将所有文本都放到最后一个空格或行首,以及最后一个空格或行尾(减去任何结尾标点符号)。正则表达式问题

现在我以行为为例:“jones.com/ca some text”,使用javascript正则表达式:“\\(.+?^\\s).com?([^\\s]+)?\\”,我得到的全部是“.com/ca”作为输出。

+1

“任何Web URL扩展名”,如果你说的是有效的顶级域名,是一个非常长的名单。比.com .net .co和.gov长得多。可能最好匹配看起来可能是顶级域名的东西。 – 2011-04-06 13:12:05

+0

你需要让我知道你期待正则表达式的详细程度,我可以编辑我的文章。我实际上是在这个链接上张贴了最后划出的正则表达式的Joe http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx – Joe 2011-04-06 13:20:57

回答

0

这个例子将捕获特定域名COM,ORG和县委书记

\b\w+\.(?:com|org|gov)/[a-z]{2}\b 

,这将捕捉到几乎所有领域

\b\w+\.[a-z]{2,3}/[a-z]{2}\b 

它使用单词边界,使其不捕获空白。

0

一个综合的正则表达式将比你想象的复杂得多。 list of top-level domains相当长(.gov,.info,.edu,.museum等),还有像localhost这样的“特殊”域。此外,许多域名都以两个字母的国家/地区缩写(例如谷歌巴西的google.com.br或del.icio.us)结尾。

最简单的事情是在开始时寻找http(s)://www,并假设后面是一个域名。如果你不这样做,你会错过很多,或者会有很多误报。

你可以尝试以下方法,但最后一个选项(最后|后)将是开放的显著的误报:

/https?:\/\/\S+|www\.\S+|([-a-z0-9_]+\.)+(com|org|edu|gov|mil|info|[a-z]{2})(\/\S*)?|([-a-z0-9_]+\.)+[-a-z0-9_]+\/\S*/ig