为什么javascript matches()返回多个项目

时间:2013-11-13 06:43:21

标签: javascript regex typescript

我并不经常使用正则表达式,所以这可能是一个noob问题。我正在对我解析的文件进行iframe上传,当我查看iframe的.innerHTML时,我的回复是在预标签中。我只想获得没有预标签的数据。我想,因为这是我们在这里做的一次性事情,我们验证了数据服务器端,我知道我的数据只有开启和关闭预标签。

在这个正则表达式测试器上:http://www.regular-expressions.info/javascriptexample.html 我用这个正则表达式:

<pre>(.*?)</pre>

在我的测试数据上:

<pre>{test : foo}</pre>

在这个网站上,当我要求它“显示匹配”时,它会让我回来

{test:foo}

但是当我在实际代码中尝试这个时,我会这样做:

var iframeContents = $("#postiframe").get(0).contentWindow.document.body.innerHTML;
var re = new RegExp("<pre>(.*?)</pre>");
var results = iframeContents.match(re);
console.log(iframeContents);
console.log("results");
console.log(results);

注意:我不得不使用新的RegExp样式,因为我无法弄清楚Typescript中如何创建文字正则表达式。无论如何,当我记录结果时,

结果[0]看起来像:

<pre>{test : foo}</pre>

结果[1]看起来像:

{test:foo}

这样的两场比赛是否正确?感谢。

3 个答案:

答案 0 :(得分:2)

.match()返回一个数组

返回结果中的

[0]是整场比赛。

[1]是第一个匹配的组(正则表达式中的parens中的东西)

[2]是第二个匹配的组

依旧......

如果您希望与匹配的群组进行多次匹配,则可以使用正则表达式上的g标记,并使用多次调用.exec()

var iframeContents = $("#postiframe").get(0).contentWindow.document.body.innerHTML;
var re = new RegExp("<pre>(.*?)</pre>", "g");
var matches;
while (matches = re.exec(iframeContents)) {
    // matches[1] will be each successive block of text between the pre tags
    console.log(matches[1]);
}

答案 1 :(得分:0)

是的,这是正确的。

结果是一个数组,其中第一项是与整个正则表达式匹配的字符串部分,以下项是使用括号捕获的值。

答案 2 :(得分:0)

一些事情:

  • 要使用正则表达式文字,您需要使用/转义\所以\/
  • 使用/ g以便只获得结果。

因此:

var iframeContents = '<pre>{test : foo}</pre>'
var re = /<pre>(.*?)<\/pre>/g; // you need to escape "/", to get only results use '/g'
var results = iframeContents.match(re);
console.log("results",results);

查看实时示例:http://goo.gl/BzKlmA