IE浏览器中的javascript分裂正则表达式错误

时间:2010-12-11 17:22:33

标签: javascript regex split internet-explorer-7

我试图在javascript中使用此正则表达式({[^{}]*})进行拆分,但我得到的结果与IE7和FF不同。 firefox结果是正确的。

<style>
.box.round {
    border-radius: 10px;
}
</style>
<script>
jQuery(function ($) {
    $('style').each(function () {
    text = $(this).html();

    alert(text);
    alert(text.split(/({[^{}]*})/));
    // result in FF: .box.round ,{border-radius: 10px;},
    // result in IE7: .box.round
    });
});
</script>

更新 有没有办法改变正则表达式,所以它可以在IE7中工作,而无需添加JavaScript库?

2 个答案:

答案 0 :(得分:6)

请参阅this old blog post,了解.split()正则表达式中捕获组处理方式变化的可能解决方案。

从那篇文章:

  
      
  • Internet Explorer从结果数组中排除几乎所有空值(例如,当两个分隔符在数据中彼此相邻时出现,或者在数据的开头或结尾出现分隔符时)。这对我没有任何意义,因为IE在使用字符串作为分隔符时确实包含空值。
  •   
  • Internet Explorer和Safari不会将捕获括号的值拼接到返回的数组中(此功能对于简单的解析器等非常有用)。
  •   
  • 由于非参与捕获组,Firefox不会将未定义的值拼接到返回的数组中。
  •   
  • Internet Explorer,Firefox和Safari有各种其他边缘案例错误,它们不遵循拆分规范(实际上非​​常复杂)。
  •   

Levithan的XRegExp库非常小而且非常实用,它包含了修复程序。

答案 1 :(得分:0)

我制作的解决方案适用于正则表达式({[^{}]*}),也可能适用于其他人。

function ieSplit(str, separator) {
    var match = str.match(RegExp(separator, 'g'));
    var notmatch = str.replace(new RegExp(separator, 'g'), '[|]').split('[|]');
    var merge = [];
    for(i in notmatch) {
        merge.push(notmatch[i]);
        if (match != null && match[i] != undefined) {
            merge.push(match[i]);
        }
    }
    return merge;
}
alert(ieSplit(text, '({[^{}]*})'));
// result in FF : .box.round ,{border-radius: 10px;},
// result in IE7: .box.round ,{border-radius: 10px;},