我自由地承认,我对正则表达式的理解是多余的。也就是说,我无法做到这一点的头或尾。这只发生在Chrome中。Chrome中的正则表达式奇怪
我有这段代码拉出来在一个HTML字符串body
标签之间的文本:
var extractBodyHtml = function (obj) {
var regex = /<body.*?>([\s\S]*?)<\/body>/g;
//if (obj.match(regex)) {
if (regex.test(obj)) {
return RegExp.$1;
} else {
return obj;
}
};
更新
在拨弄我不能重现此。事实上,完全相同的代码在一个地方工作,而不是相同的HTML,但不是另一个。免得你觉得我疯了,这里是调试器。
http://www.outsharked.com/chromedebug.png
注意注释行。这是第一个版本。有时它有效。在其他情况下,RegExp.$1
只会返回单个字符“r”。这对于特定的情况总是可重现的。
请注意,obj.match(regex)
始终返回正确的匹配(包括body标签),但访问反向引用会给“r”有时。
当我将代码更改为regex.test(obj)
时,情况始终正常,RegExp.$1
返回内部内容。
我在做什么错?
**为什么**你在做这个? 'document.body.innerHTML'有什么问题? – Matt
因为它是一个字符串。它不是DOM的一部分。这是来自ajax查询的响应。 –
你可以发布你的代码不工作在jsfiddle的例子吗? –