试图使我的 JavaScript 代码与 IE7 兼容,但我遇到了(可能是错误)IE7 的一些问题。
var elements = url.match(/^:(\d+)(.*)/);
对有效匹配返回 null:
:80/site1/www
:8080/site2/public_html
不知道如何重写这个。有任何想法吗?
试图使我的 JavaScript 代码与 IE7 兼容,但我遇到了(可能是错误)IE7 的一些问题。
var elements = url.match(/^:(\d+)(.*)/);
对有效匹配返回 null:
:80/site1/www
:8080/site2/public_html
不知道如何重写这个。有任何想法吗?
以下是实现差异:
* 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 回调作为捕获组的替代方法来解决浏览器错误。
参考