0

试图使我的 JavaScript 代码与 IE7 兼容,但我遇到了(可能是错误)IE7 的一些问题。

var elements = url.match(/^:(\d+)(.*)/);

对有效匹配返回 null:

:80/site1/www
:8080/site2/public_html

不知道如何重写这个。有任何想法吗?

4

1 回答 1

0

以下是实现差异:

* Internet Explorer ≤ 8 从结果数组中排除几乎所有空值(例如,当数据中两个分隔符相邻出现时,或者当分隔符出现在数据的开头或结尾时)。使用字符串作为分隔符时,此行为会有所不同。

* Internet Explorer ≤ 8 和旧版本的 Safari 不会将捕获组的值拼接到返回的数组中。

* 在 Internet Explorer 中,RegExp.prototype.exec 和 String.prototype.match 错误地将未参与捕获组的捕获值返回为空字符串而不是未定义,从而无法确定组参与。

* 使用 RegExp.prototype.exec 和 RegExp.prototype.test 时,Internet Explorer ≤ 8 在零长度匹配后增加 lastIndex。

* 在 Internet Explorer 中,RegExp.prototype.exec 和 String.prototype.match 错误地将未参与捕获组的捕获值返回为空字符串而不是未定义,从而无法确定组参与。

使用更简单的 RegExp:

var pattern = ":.\\d+/.*";
var data = {"foo":":8080/site2/public_html", "bar":":80/site1/www"};

var elements = (RegExp(pattern).exec(data.foo) + "," + RegExp(pattern).exec(data.bar)).split(",");

使用replaceValue 回调作为捕获组的替代方法来解决浏览器错误。

参考

于 2015-01-16T22:59:46.513 回答