H有一个与网站网址匹配的正则表达式
.+\.\w\w.*(.*)
我想提取与我的字符串匹配的网址,例如:
什么是google.com?
当我运行我的代码时
var x = /.+\.\w\w.*(.*)/
x.exec( "what is <http://google.com>?" )
而是返回
[&#34;什么是http://google.com?&#34;,&#34;&#34;]
而不只是返回我希望它匹配的网址,为什么会发生这种情况?
答案 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@:%_\+.~#?&\/=]*)
此正则表达式将执行以下操作:
http
或https
现场演示
https://regex101.com/r/kB1mS6/3
示例文字
what is <http://google.com>?
what is www.ibm.com?
are these the Droids.I.com?Lookingfor=Yes
样本匹配
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))?
现场演示
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的表达式,以单独捕获网址。