前端之家收集整理的这篇文章主要介绍了
正则表达式 – JavaScript:拆分在IE中不起作用?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有一个原因导致以下
代码无法在IE中运行?
使用FF和其他理智的浏览器时,它会按给定的表达式拆分字符串,在IE中它根本不起作用.
var str = "abc<font id=\"something\">def</font>gh";
alert(str.split(/(\<.*?\>|.)/).length);
谢谢.
@H_
403_7@
你可以将下面的
代码添加到你的程序中,它会起作用.
var split;
// Avoid running twice; that would break the `nativeSplit` reference
split = split || function (undef) {
var nativeSplit = String.prototype.split,compliantExecNpcg = /()??/.exec("")[1] === undef,// NPCG: nonparticipating capturing group
self;
self = function (str,separator,limit) {
// If `separator` is not a regex,use `nativeSplit`
if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
return nativeSplit.call(str,limit);
}
var output = [],flags = (separator.ignoreCase ? "i" : "") +
(separator.multiline ? "m" : "") +
(separator.extended ? "x" : "") + // Proposed for ES6
(separator.sticky ? "y" : ""),// Firefox 3+
lastLastIndex = 0,// Make `global` and avoid `lastIndex` issues by working with a copy
separator = new RegExp(separator.source,flags + "g"),separator2,match,lastIndex,lastLength;
str += ""; // Type-convert
if (!compliantExecNpcg) {
// Doesn't need flags gy,but they don't hurt
separator2 = new RegExp("^" + separator.source + "$(?!\\s)",flags);
}
/* Values for `limit`,per the spec:
* If undefined: 4294967295 // Math.pow(2,32) - 1
* If 0,Infinity,or NaN: 0
* If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
* If negative number: 4294967296 - Math.floor(Math.abs(limit))
* If other: Type-convert,then use the above rules
*/
limit = limit === undef ?
-1 >>> 0 : // Math.pow(2,32) - 1
limit >>> 0; // ToUint32(limit)
while (match = separator.exec(str)) {
// `separator.lastIndex` is not reliable cross-browser
lastIndex = match.index + match[0].length;
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex,match.index));
// Fix browsers whose `exec` methods don't consistently return `undefined` for
// nonparticipating capturing groups
if (!compliantExecNpcg && match.length > 1) {
match[0].replace(separator2,function () {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undef) {
match[i] = undef;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output,match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++; // Avoid an infinite loop
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test("")) {
output.push("");
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0,limit) : output;
};
// For convenience
String.prototype.split = function (separator,limit) {
return self(this,limit);
};
return self;
}();