繁体   English   中英

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

[英]why does javascript matches() return multiple items

我实际上并不经常进行正则表达式,因此这可能是一个菜鸟问题。 我正在对要解析的文件进行iframe上传,当我查看iframe的.innerHTML时,我的回应是在pre标签中。 我只想获取没有预标签的数据。 我认为这是我们要做的一次性事情,因此我们在数据服务器端进行了验证,我知道我的数据将只包含打开和关闭前置标签。

在此正则表达式测试器上: 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}

这样获得两场比赛正确吗? 谢谢。

.match()返回一个数组

返回结果中的[0]是整个匹配项。

[1]是第一个匹配的组(正则表达式中括号内的内容)

[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]);
}

对,那是正确的。

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

几件事情:

  • 要使用正则表达式文字,您需要使用\\来转义/所以\\/
  • 使用/ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM