JavaScript RegExp:test和exec

时间:2012-01-07 11:39:22

标签: javascript regex

我想获取多行文字中所有图片的网址(无论它包含什么内容)。

这是我的代码:

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 。为什么?你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:8)

这是因为g标志。如果您反转这两个调用,您将得到不同的结果,因为全局标志设置pattern.lastIndex并在您下次调用.test / .exec时从该索引开始匹配。反转通话时,null的结果为.execfalse.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)