我并不经常使用正则表达式,所以这可能是一个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}
这样的两场比赛是否正确?感谢。
答案 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)
一些事情:
/
转义\
所以\/
因此:
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