什么'用这个正则表达式查找URL是错误的
What's wrong with this regular expression to find URLs?
我正在开发一个JavaScript,从谷歌搜索URL中提取URL,如下所示:
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);
我已经通过几个regex测试人员运行了这个,它似乎可以工作,但在实践中,我返回的字符串看起来是这样的:
thisisthepartiwanttofind.org,.org
那么后面的,.org
是从哪里来的呢?
我知道我的模式不是很健壮,但请不要建议使用更好的模式。我真的很想听听关于我在这件事上做错了什么的建议。谢谢
如果不处理.org
,请删除正则表达式中的括号(不太可能,因为它是文字)。根据@Mark注释,添加一个+
以匹配类['w'd]
的一个或多个字符。此外,我会逃离这个点:
var checkForURL = /['w'd]+'.org/i;
您实际得到的是一个由2个结果组成的数组,第一个是整个匹配,第二个是您使用parens(.org)定义的组。
比较:
/([''w''d]+)''.org/.exec('thistheurl.org')→["thissithurl.org","thissisturl"]/[''w''d]+''.org/.exec('thistheurl.org/')→["thisiteurl.org"]/([''w''d]+)(''.org)/.exec('thistheurl.org')→["thisisteurl.org","thisistyurl",".org"]
JS正则表达式的.exec的结果是一个字符串数组,第一个是整个匹配项,然后是您使用parens定义的表示组。如果正则表达式中没有parens,那么这个数组中只有一个元素——整个匹配。
您应该在(.org)
正则表达式组中转义.
(DOT),或者它匹配任何字符。因此,您的正则表达式将变为:
/['w'd]+('.org)/
为了匹配你的例子中的url,你可以使用这样的东西:
https?://([0-9a-zA-Z_.?=&'-]+/?)+
或者像这样更准确的东西(你应该根据你的需要选择正确的正则表达式):
^https?://([0-9a-zA-Z_'-]+'.)+(com|org|net|WhatEverYouWant)(/[0-9a-zA-Z_'-?=&.]+)$
相关文章:
- 使用RegExp查找url中的字符
- 在字符串中查找所有图像 src URL 并存储在数组中
- 需要URL模板占位符查找和替换功能的输入
- 使用Regex查找URL中的特定字符串
- $http GET URL更改并查找错误的资源
- Greasemonkey - 如何在以特定字符串开头的页面上查找并打开 aν URL
- JavaScript-按位置查找URL中的文本
- 从github url中查找用户、repo和路径
- 什么'用这个正则表达式查找URL是错误的
- 在Javascript中查找请求URL
- 查找任何未定义的变量并从url字符串中隐藏
- 使用Crossrider查找窗口并导航到URL
- 检查/查找 url 中是否有数组的任何单词
- eBay 查找 API findItemsByKeywords 返回“输入 URL 为标头 X-EBAY-SOA-OPE
- Javascript 正则表达式:查找所有 URL 优化
- 如何查找登录凭据发送到的 URL
- JS:在文本中查找URL,建立链接
- 将URL加载到iframe中并查找刚刚加载的HTML的值 - Jquery
- 按URL查找浏览器选项卡并将其关闭
- Python/Django:自动URL查找器+文本中的荧光笔