我认为社区帮助我解决了 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/