IE8无法识别我的正则表达式

M M*_*ler 1 javascript regex internet-explorer-8

我正在尝试解析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];
Run Code Online (Sandbox Code Playgroud)

我已经确认变量html的值是预期的.

有帮助吗?

谢谢!

Asa*_*din 5

您应该将字符串传递给regexen的构造函数,或者使用正则表达式文字语法,但不能同时使用两者.

var bodyIDregex = /<body[^>]*id=["'](.*?)["']>/gi
Run Code Online (Sandbox Code Playgroud)

要么

var bodyIDregex = new RegExp("<body[^>]*id=[\"'](.*?)[\"']>","gi")
Run Code Online (Sandbox Code Playgroud)

更新:

正如您在答案中正确识别的那样,问题源于正则表达式搜索从上一个匹配中的最后一个字符的位置继续进行的事实.解决此问题的一种方法是重置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"
Run Code Online (Sandbox Code Playgroud)