将字符串提取到数组正则表达式

时间:2012-01-31 00:37:15

标签: javascript regex

我快到了!只是无法弄清楚我需要的最后一部分......形成阵列。

我想浏览一个html文件并从短语 playVideo('')

之间提取网址

出于测试目的,我只是试图让它在变量str上工作,最终它将被html文档替换:

<script type="text/javascript">
    var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')"; 

    var testRE = str.match("playVideo\\(\'(.*?)\'");

    alert(testRE[1]);
</script>

这将输出'url1',但如果我将其更改为alert(testRE [2]),则它是未定义的。如何让它用所有URL填充数组(例如testRE [2]输出'url2'等)?

感谢任何帮助,对正则表达式不熟悉。

2 个答案:

答案 0 :(得分:3)

无法发表评论,为什么会这样,但通过迭代正则表达式来添加你可以访问这些组;

var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')";
var re = /playVideo\('(.*?)'\)/g;
while (match = re.exec(str)) {
    alert(match[1]);
}

答案 1 :(得分:2)

通常,javascript正则表达式只会执行第一个匹配。更新正则表达式以添加g修饰符。不幸的是,JavaScript正则表达式没有非捕获组,因此您必须进行更多处理才能提取所需的位。例如

<script type="text/javascript">
var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')"; 

var testRE = str.match(/playVideo\(\'[^']*\'/g);
var urls = [];
for (var i = 0; i < testRE.length; i++)
{
    urls[i] = testRE[i].substring(11).match(/[^']*/);
}

alert(urls[1]);
alert(urls[2]);
</script>