这个正则表达式找到URL有什么问题?

时间:2012-08-05 17:40:40

标签: javascript regex

我正在使用JavaScript从Google搜索网址中提取网址,如下所示:

http://www.google.com/search?client=safari&rls=en&q=thisisthepartiwanttofind.org&ie=UTF-8&oe=UTF-8

现在,我的代码看起来像这样:

var checkForURL = /[\w\d](.org)/i;
var findTheURL = checkForURL.exec(theURL);

我通过几个正则表达式测试人员运行它,它似乎工作,但在实践中我返回的字符串看起来像这样:

thisisthepartiwanttofind.org,.org

那么尾随,.org来自哪里?

我知道我的模式并不是非常强大,但请不要建议使用更好的模式。我真的很喜欢关于这个问题的建议。谢谢!

3 个答案:

答案 0 :(得分:1)

您应该在.正则表达式组中转义(.org)(DOT),或者它与任何字符匹配。所以你的正则表达式会变成:

/[\w\d]+(\.org)/

要匹配示例中的网址,您可以使用this

之类的内容
https?://([0-9a-zA-Z_.?=&\-]+/?)+

或更准确的内容,如this(您应根据需要选择正确的正则表达式):

^https?://([0-9a-zA-Z_\-]+\.)+(com|org|net|WhatEverYouWant)(/[0-9a-zA-Z_\-?=&.]+)$

答案 1 :(得分:1)

如果不处理.org,则删除正则表达式中的括号(不太可能,因为它是文字)。根据@Mark评论,添加+以匹配班级[\w\d]的一个或多个字符。另外,我会逃避点:

var checkForURL = /[\w\d]+\.org/i;

答案 2 :(得分:1)

你实际获得的是一个包含2个结果的数组,第一个是整个匹配,第二个是你使用parens(.org)定义的组。

与:比较:

/([\w\d]+)\.org/.exec('thisistheurl.org')
→ ["thisistheurl.org", "thisistheurl"]

/[\w\d]+\.org/.exec('thisistheurl.org')
→ ["thisistheurl.org"]

/([\w\d]+)(\.org)/.exec('thisistheurl.org')
→ ["thisistheurl.org", "thisistheurl", ".org"]

JS正则表达式的.exec的结果是一个字符串数组,第一个是整个匹配,后续表示使用parens定义的组。如果正则表达式中没有parens,则此数组中只有一个元素 - 整个匹配。