我想获取多行文字中所有图片的网址(无论它包含什么内容)。
这是我的代码:
var pattern = /(http:\/\/\S+\.(?:jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG))/mg;
var testResult = pattern.test(str));
var result = pattern.exec(str);
如果 str 等于“http://example.dom.com/-6/x_5eb0916a.jpg”, testResult 等于 true 但结果 null 。为什么?你能帮我解决这个问题吗?
答案 0 :(得分:8)
这是因为g
标志。如果您反转这两个调用,您将得到不同的结果,因为全局标志设置pattern.lastIndex
并在您下次调用.test
/ .exec
时从该索引开始匹配。反转通话时,null
的结果为.exec
,false
为.test
。
使用.lastIndex
和全局标记,在您的情况下,它与.test
的网址匹配,并在您执行{时第一个网址后开始查找更多网址 {1}}。没有其他网址,因此您将获得.exec
。请注意,null
会重置为lastIndex
,因此再次调用0
即可。
无论如何,您似乎正在寻找.exec
,而只是列出所有匹配项:
str.match(pattern)
答案 1 :(得分:2)
解决此问题的方法是简单地将正则表达式的lastIndex设置为零。
var pattern = /(http:\/\/\S+\.(?:jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG))/mg;
var testResult = pattern.test(str));
pattern.lastIndex=0;
var result = pattern.exec(str);
pattern.lastIndex=0;
答案 2 :(得分:1)
你试过这个吗,
"http://example.dom.com/-6/x_5eb0916a.jpg".match(pattern)