我正在使用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
来自哪里?
我知道我的模式并不是非常强大,但请不要建议使用更好的模式。我真的很喜欢关于这个问题的建议。谢谢!
答案 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,则此数组中只有一个元素 - 整个匹配。