正则表达式while循环只将1个值推送到我的数组

时间:2017-05-17 13:05:30

标签: javascript regex typescript

我的变量htmlContent包含一个字符串,其中包含格式正确的HTML代码,其中包含多个img标记。

我试图获取图片src属性的所有值,并将它们放在数组srcList中。

但是,我面对以下代码时遇到的问题是它始终会警告一个只包含1个源值的数组,而我将其设置为推送 all 源代码数组的URL而不只是一个。

let srcList = [],
    imgSrc,
    regex = /<img.*src="(.*?)"/gi;

while ((imgSrc = regex.exec(htmlContent)) !== null) {
    srcList.push(imgSrc[1]);
}

alert(JSON.stringify(srcList));

我如何按照我的预期来完成这项工作?

1 个答案:

答案 0 :(得分:4)

正则表达式中Animated.timing( this.state.posY ).stop(); .*之间的img贪婪地匹配从第一个src到最后一个img的所有内容 - 否则您的代码基本上是正确的,但只会抓住最后一个图像源。

将贪婪匹配替换为仅在每个src标记内匹配的内容的示例(如注释中所述,html字符串是单行):

<img>

(我觉得有必要在此处插入强制性的“don't try to parse HTML with regular expressions”警告。请考虑使用let srcList = [], imgSrc, regex = /<img[^>]*src="(.*?)"/gi; let htmlContent = '<img src="foo"><img class="bat" src="bar"><img src="baz">'; while (imgSrc = regex.exec(htmlContent)) { srcList.push(imgSrc[1]); } console.log(srcList);之类的内容。)