[英]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]);
}
对,那是正确的。
结果是一个数组,其中第一项是与整个正则表达式匹配的字符串的一部分,随后的项是使用括号捕获的值。
几件事情:
\\
来转义/
所以\\/
因此:
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.