IE8不识别我的正则表达式
IE8 is not recognizing my regular expression
我正在尝试解析AJAX响应并获取body标记的id。但是,我不能通过jQuery做到这一点,因为jQuery不能模拟body标签的DOM响应。
我把它分成许多行,试图隔离错误。这在现代浏览器中工作,但在IE8中失败。
var bodyIDregex = new RegExp(/<body[^>]*id=["'](.*?)["']>/gi),
matched = html.match(bodyIDregex),
bodyID = bodyIDregex.exec(matched[0]);
bodyID = bodyID[1];
我已经确认了变量html的值是预期的。
帮忙吗?
谢谢!
您应该将字符串传递给regex的构造函数,或使用regex字面语法,但不能同时使用。
var bodyIDregex = /<body[^>]*id=["'](.*?)["']>/gi
或
var bodyIDregex = new RegExp("<body[^>]*id=['"'](.*?)['"']>","gi")
更新:
正如您在答案中正确识别的那样,问题源于这样一个事实,即正则表达式搜索从前一个匹配中的最后一个字符的位置继续。纠正这个错误的一种方法是重置lastIndex
,但在本例中这不是必需的,因为您只需要匹配字符串一次:
var bodyIDregex = /<body[^>]*id=["'](.*?)["']>/gi,
bodyID = bodyIDregex.exec(html);
//bodyID is now the array, ["<body id="test">asdf</body>", "test"]
alert(bodyID[1]);
//alerts the captured group, "test"
显然,当您调用(RegExp object).match(string)时,它会增加RegExp对象的一个名为lastIndex的属性。我不完全熟悉RegExp对象是如何工作的,但是当稍后尝试调用exec()方法时,这会导致问题。
显然,解决方案是将lastIndex重置为0。
var html = '<html><body id="test">asdf</body></html>';
var bodyIDregex = /<body[^>]*id=["'](.*?)["']>/gi,
matched = html.match(bodyIDregex);
// Reset lastIndex
bodyIDregex.lastIndex = 0;
var bodyID = bodyIDregex.exec(matched[0]);
alert(bodyID.length);
bodyID = bodyID[1];
document.write(bodyID); // writes test
相关文章:
- 调用正则表达式匹配的函数
- 如何排除此正则表达式中的空白匹配项
- 是否可以扩展正则表达式元字符的范围
- 正则表达式中的错误
- 匹配三个正则表达式中的任意一个,以先到的为准(在javascript中)
- 如何在javascript中匹配和提取正则表达式中的部分结果
- [^/:]|正则表达式改进的倒数
- 获取字符串中与正则表达式匹配的所有子字符串
- Jquery 替换所有文本语法正则表达式中的变量
- JavaScript正则表达式中的组匹配
- 需要正则表达式模式的帮助
- 字符串必须与正则表达式中的两个值匹配
- 删除两个字符串正则表达式之间的所有内容
- 正则表达式上的重音符号有什么用
- 正则表达式中的非组
- 为什么我在正则表达式背后的积极看法无效
- 正则表达式替换的比我想要的更多
- 为什么当我逃避<正则表达式中的字符
- 我可以在HTML文本区域中突出显示多个在Javascript中正则表达式失败的单词吗?
- 简单的正则表达式:我怎么说:“在单词末尾有一个”s“或”es“或”的“是可以的,也匹配它们