【问题标题】:Javascript regex cross-browser discrepancyJavascript正则表达式跨浏览器差异
【发布时间】:2012-08-25 00:04:28
【问题描述】:

这段代码从Firefox到IE8带来了不同的结果:

var text = "[AMOUNT] MILES DEDUCTED IN [CABIN] FOR [ORIGIN]";
var splitArray = text.split(/[\[\]]/);
alert(splitArray.length);   

在 Firefox 中,警报给出 7。 而在 IE 中,它给出 5。

我试过了……

Javascript RegEx trouble in Internet Explorer

但它不起作用。

有什么想法吗? 谢谢!

【问题讨论】:

  • splitArray 在 FF 和 IE 中究竟包含什么?如果您说您“尝试”了另一个问题的答案,您是否真的使用了脚本:blog.stevenlevithan.com/archives/cross-browser-split
  • 浏览器在正则表达式上的 .split() 行为不同。 See this page.
  • @FelixKling Firefox 在数组的开头和结尾给出空字符串,表示原始字符串开头和结尾的方括号。
  • @Pointy:啊,有趣。谢谢!

标签: javascript regex internet-explorer firefox cross-browser


【解决方案1】:

下一个代码没有经过全面测试,但在快速测试中可以正常工作:

获得 IE8 和更少的拆分行为:

var text = "[AMOUNT] MILES DEDUCTED IN [CABIN] FOR [ORIGIN]";
var arr = text.match(/[^\[\]]+/g);
// arr is ["AMOUNT", " MILES DEDUCTED IN ", "CABIN", " FOR ", "ORIGIN"]

要获得 FF 分裂行为:

var text = "[AMOUNT] MILES DEDUCTED IN [CABIN] FOR [ORIGIN]";
var arr = text.match(/[^\[\]]+|^(?=[\[\]])|[^\[\]]?(?=[\[\]]$)|[^\[\]]?(?=[\[\]]{2})/g);
// arr is ["", "AMOUNT", " MILES DEDUCTED IN ", "CABIN", " FOR ", "ORIGIN", ""]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2013-12-10
    相关资源
    最近更新 更多