RegEx只找到一个匹配项

时间:2014-06-22 16:58:01

标签: javascript regex

所以这是我的javascript正则表达式:

/src\s*=\s*"([^"]+)"/g;

我使用regexpal.com以及regexr.com来帮助我验证它是否正常工作(匹配我想要的所有元素)。这是我的测试输入:

未转义的正则表达式:

src\s*=\s*"([^"]+)"

测试字符串:

<html>
<head>
    <title></title>
</head>
<body>
<p><img src="bart.jpg" style="width:100px; height:100px" /><img src="cover.jpg" style="width:100px; height:100px" /></p>
</body>
</html>

它会正确地突出显示所有src="X",所以我认为它可以正常工作。

现在这就是我运行代码的方式:

var matches = RegexHelper.getImgSourceRegEx().exec(dataString);

我得到的匹配元素如下:

0: "src="bart.jpg"" // correct
1: "bart.jpg"

我有点困惑,为什么这不给我:

0: "src="bart.jpg""
1: "src="cover.jpg""

2 个答案:

答案 0 :(得分:2)

exec如何使用g标志。这是一个国家体系。

第一次调用exec时,它将返回第一个匹配项,并完成子模式。

第二次打电话给你,你将获得第二次比赛。

一旦你的比赛用完,它将返回false,然后回到第一场比赛准备好接下来的比赛。

基本上,只需继续调用exec,也许是在循环中。

如果您只想要完整匹配,请尝试dataString.match(RegexHelper.getImgSourceRegEx())

答案 1 :(得分:0)

更改您的代码如下:

  • 删除正则表达式中的括号以删除内部匹配(bart.jpg),

    var reg = /src\s*=\s*[^"]+"/g;
    
  • 并重复拨打exec以获得下一场比赛。