从字符串中提取特定的网站URL

时间:2016-06-18 01:46:51

标签: javascript regex

H有一个与网站网址匹配的正则表达式

.+\.\w\w.*(.*)

我想提取与我的字符串匹配的网址,例如:

  

什么是google.com?

当我运行我的代码时

var x = /.+\.\w\w.*(.*)/
x.exec( "what is <http://google.com>?" )

而是返回

  

[&#34;什么是http://google.com?&#34;,&#34;&#34;]

而不只是返回我希望它匹配的网址,为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

这是因为你的正则表达式并不真正匹配网址,但实际上还有更多。

有关如何匹配网址的一些灵感,您可以查看来自this StackOverflow answer的提案:

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)

答案 1 :(得分:0)

描述

在你的表达式中,.抓取任何字符,+*使捕获变得贪婪。最终效果是捕获所有角色。

([-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:%_\+.~#?&\/=]*)

Regular expression visualization

此正则表达式将执行以下操作:

  • 查找类似于网址的字符串
  • 忽略任何潜在客户httphttps
  • 从URL
  • 拆分查询子字符串

实施例

现场演示

https://regex101.com/r/kB1mS6/3

示例文字

what is <http://google.com>?
what is www.ibm.com?
are these the Droids.I.com?Lookingfor=Yes

样本匹配

  • 捕获组0获取url和查询字符串(如果存在)
  • 捕获组1获取网址
  • 捕获组2获取查询字符串(如果存在)
MATCH 1
1.  [16-26] `google.com`
2.  [26-26] ``

MATCH 2
1.  [37-48] `www.ibm.com`
2.  [48-49] `?`

MATCH 3
1.  [64-76] `Droids.I.com`
2.  [76-91] `?Lookingfor=Yes`

要进一步捕获句子中的其他单词,您可以修改表达式:

([-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:%_\+.~#?&\/=]*)(?:>?\s+(down))?

Regular expression visualization

实施例

现场演示

https://regex101.com/r/kB1mS6/4

示例文字

what is <http://google.com> down?
what is www.ibm.com?
are these the Droids.I.com?Lookingfor=Yes
why is http://www.bing.com down?
why is www.bing.com down?

样本匹配

MATCH 1
1.  `google.com`
2.  ``
3.  `down`

MATCH 2
1.  `www.ibm.com`
2.  `?`

MATCH 3
1.  `Droids.I.com`
2.  `?Lookingfor=Yes`

MATCH 4
1.  `www.bing.com`
2.  ``
3.  `down`

MATCH 5
1.  `www.bing.com`
2.  ``
3.  `down`

这会稍微修改https://stackoverflow.com/a/3809435/3836229的表达式,以单独捕获网址。