正则表达式 – JavaScript:拆分在IE中不起作用?

前端之家收集整理的这篇文章主要介绍了正则表达式 – JavaScript:拆分在IE中不起作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有一个原因导致以下代码无法在IE中运行?
使用FF和其他理智的浏览器时,它会按给定的表达式拆分字符串,在IE中它根本不起作用.
var str = "abc<font id=\"something\">def</font>gh";
alert(str.split(/(\<.*?\>|.)/).length);

谢谢.

你可以将下面的代码添加到你的程序中,它会起作用.
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;
}();
原文链接:https://www.f2er.com/regex/356937.html

猜你在找的正则表达式相关文章