javascript - 这个 JS RegEx 会在 IE7 和 IE8 中失败,但在 IE9 中不会失败,这是怎么回事?

标签 javascript regex internet-explorer internet-explorer-8 internet-explorer-7

我认为社区帮助我解决了 this problem w/a 不区分大小写的正则表达式,但我弄错了。下面的正则表达式在 IE7 和 IE8 中失败怎么办?

var reggy = /(\s*?)<span\b(?:.*?)(?:class=(?:'|"|.*?\s)?foobar(?:\s|\3))(?:.*?)(?:\/)?>(.+?)<\/span>(\s*?)/ig;

jsFiddle here 。仅在 IE7 和 IE8 中才会给出“不匹配”结果。

最佳答案

该正则表达式有几个问题,其中最糟糕的是您似乎混淆了捕获组和非捕获组。正如 Mike Samuel 暗示的那样,第三个捕获组是最后的 (\s*?) (它与开头的捕获组一样,没有任何用处)。试试这个正则表达式:

/<span\b[^>]*\bclass=\s*(['"]?)forbes_entity\1[^>]*>[\s\S]*?<\/span>/ig

这里只有一个捕获组;它捕获单引号、双引号或什么也不捕获。类名后面的 \1 再次匹配相同的内容。 (我更改了类名称以匹配 fiddle 中的示例文本。)

事实证明我不需要任何其他组,但如果我需要它们,我会使用非捕获组( (?:...) )来更容易跟踪捕获组编号。我还使用 [\s\S] 而不是 . 来匹配跨度的内容,以防它包含任何换行符。

关于javascript - 这个 JS RegEx 会在 IE7 和 IE8 中失败,但在 IE9 中不会失败,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070670/

相关文章:

javascript - 如何建立链接 - 链接到 DIV?

regex - 如何使用正则表达式在powershell中获取字符和字符串之间的子字符串

html - Internet Explorer 在链接中显示不需要的空间

html - 表格只能在 Chrome 中正常工作

javascript - sails.js 中关联模型的 Where 子句

javascript - 如何在使用javascript生成的 anchor 标记上添加onclick事件?

python - IPv6 正则表达式 python

java - 用双引号封装时转义序列与预定义字符类(也称为特殊正则表达式字符)

reactjs - React 路由器更改 url 但不更改 View (仅在 Internet Explorer 11 上)

javascript - 如何修复 javascript 弹出窗口 "Window popup is already registered in the DOM!"?