正则表达式问题

时间:2011-04-06 13:09:51

标签: javascript regex

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

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

3 个答案:

答案 0 :(得分:0)

此示例将捕获特定域com,org和gov

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

这将捕获几乎所有域

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

它使用单词边界,因此它不会捕获空白区域。

答案 1 :(得分:0)

匹配网址有点暗淡。以下网站具有相当精心设计的正则表达式:http://daringfireball.net/2010/07/improved_regex_for_matching_urls

答案 2 :(得分: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