`
deng131
  • 浏览: 673560 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaScript中字符串split问题

阅读更多
以前ext项目中遇到问题在此记录下.

javascript:void(alert("1:2:3".split(/(:)/)));


上述代码在IE上输出[1,2,3],FF输出["1", ":", "2", ":", "3"]

很早老外对此解决方法:
/* Cross-Browser Split 1.0.1
(c) Steven Levithan <stevenlevithan.com>; MIT License
An ECMA-compliant, uniform cross-browser split method */

var cbSplit;

// avoid running twice, which would break `cbSplit._nativeSplit`'s reference to the native `split`
if (!cbSplit) {

cbSplit = function (str, separator, limit) {
    // if `separator` is not a regex, use the native `split`
    if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
        return cbSplit._nativeSplit.call(str, separator, limit);
    }

    var output = [],
        lastLastIndex = 0,
        flags = (separator.ignoreCase ? "i" : "") +
                (separator.multiline  ? "m" : "") +
                (separator.sticky     ? "y" : ""),
        separator = RegExp(separator.source, flags + "g"), // make `global` and avoid `lastIndex` issues by working with a copy
        separator2, match, lastIndex, lastLength;

    str = str + ""; // type conversion
    if (!cbSplit._compliantExecNpcg) {
        separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // doesn't need /g or /y, but they don't hurt
    }

    /* behavior for `limit`: if it's...
    - `undefined`: no limit.
    - `NaN` or zero: return an empty array.
    - a positive number: use `Math.floor(limit)`.
    - a negative number: no limit.
    - other: type-convert, then use the above rules. */
    if (limit === undefined || +limit < 0) {
        limit = Infinity;
    } else {
        limit = Math.floor(+limit);
        if (!limit) {
            return [];
        }
    }

    while (match = separator.exec(str)) {
        lastIndex = match.index + match[0].length; // `separator.lastIndex` is not reliable cross-browser

        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 (!cbSplit._compliantExecNpcg && match.length > 1) {
                match[0].replace(separator2, function () {
                    for (var i = 1; i < arguments.length - 2; i++) {
                        if (arguments[i] === undefined) {
                            match[i] = undefined;
                        }
                    }
                });
            }

            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;
};

cbSplit._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group
cbSplit._nativeSplit = String.prototype.split;

} // end `if (!cbSplit)`

// for convenience...
String.prototype.split = function (separator, limit) {
    return cbSplit(this, separator, limit);
};


参考:
http://blog.stevenlevithan.com/archives/cross-browser-split
分享到:
评论

相关推荐

    Javascript中字符串相关常用的使用方法总结

    随着ECMAScript标准的不断发展,ES6及之后版本引入了许多新的字符串处理方法,进一步增强了JavaScript字符串操作的能力: 1. **检查字符串开头或结尾** - `startsWith(searchString[, position])` 和 `endsWith...

    js使用split函数按照多个字符对字符串进行分割的方法

    在JavaScript中,split()函数是一个非常实用的字符串处理方法,用于将字符串分割成子字符串数组。标准的split()方法允许用户通过一个特定的分隔符来分割字符串,但在很多实际编程场景中,我们需要按照多个分隔符对...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册九:字符串

    本手册将深入探讨JavaScript中的字符串,这是编程中常用的数据类型,对于理解和操作文本至关重要。 一、字符串基础 在JavaScript中,字符串是不可变的,意味着一旦创建,其内容就不能更改。字符串可以用单引号(' ')...

    字符串分割

    在许多编程语言中,如Python、Java、JavaScript等,都提供了内置的字符串分割功能。这个功能允许我们将一个长字符串依据特定的分隔符切割成多个子字符串,从而方便我们进行数据解析、处理和分析。 在Python中,`...

    JS split() 分割字符串

    在JavaScript中,`split()`函数是一个非常实用的字符串方法,用于将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法是基于指定的分隔符来切割原始字符串的。在深入探讨`split()`之前,我们需要理解...

    字符串中分离特定字符串隔开的字符串

    标题中的“字符串中分离特定字符串隔开的字符串”就是一个典型的字符串处理问题。这里我们将详细探讨如何在Java(以及Android Studio)中实现这一功能,同时也会提供一些跨语言的思路。 首先,我们要理解的是,Java...

    JavaScript中常见的字符串操作函数及用法

    字符串分割,即将一个字符串分割为多个字符串,JavaScript 中给我们提供了一个非常方便的函数 `split()`: * `var myStr = "I,Love,You,Do,you,love,me"; var substrArray = myStr.split(","); // ["I", "Love", ...

    JavaScript字符串函数大全

    根据提供的文件信息,这里将详细解释与JavaScript字符串相关的函数,并补充一些缺失或不清晰的部分,以便更好地理解每个函数的功能及用法。 ### JavaScript字符串函数大全 #### 1. Asc(x) - **功能**:返回字符的...

    以任意指定的字符分割一个字符串,然后保存在字符串数组中

    在实际应用中,你可能会遇到更复杂的场景,比如处理多字符分隔符、忽略空格、处理转义字符等,这些都是在字符串处理时需要考虑的问题。通过熟悉这些基础知识,你可以更有效地处理各种字符串处理任务。

    JavaScript_字符串验证.zip

    在这个“JavaScript_字符串验证.zip”压缩包中,我们有两个文件:`说明.txt`和`validator.js_master.zip`,它们可能包含了关于JavaScript字符串验证的详细信息。 `说明.txt`可能提供了对整个压缩包内容的简要介绍,...

    work2_分割字符串_字符串处理_

    在Python中,可以使用内置的 `split()` 方法进行字符串分割,而在JavaScript中,可以使用 `split()` 函数或者正则表达式进行分割。 总的来说,理解并熟练掌握字符串处理技巧对于任何级别的程序员都至关重要。无论是...

    常用字符串处理函数-求子字符串,字符串分割,编码转换.

    在现代编程语言如JavaScript中,字符串处理是日常开发中极为常见的任务之一。本文将深入探讨几个常用的字符串处理函数,包括如何求取子字符串、进行字符串分割以及执行编码转换。这些功能在网页开发、数据处理和文本...

    用 JavaScript 操作字符串.doc

    以下是一些关键的JavaScript字符串操作函数: 1. **concat()** - 这个函数用于连接两个或多个字符串,并返回一个新的字符串。例如: ```javascript var str1 = "Hello"; var str2 = "World"; var combined = ...

    javascript将字符串转为数组

    `split()` 是JavaScript中最常用的字符串转数组的方法。它通过指定分隔符将字符串分割成多个子字符串,并将结果放入一个数组中。例如: ```javascript let str = "Hello, World!"; let arr = str.split(", "); ...

    JavaScript语言教程:JavaScript 字符串

    ### JavaScript字符串方法详解 #### 一、概述 在JavaScript中,字符串是一种常用的数据类型,用于表示文本信息。字符串可以通过多种方式进行操作,例如查找字符、连接字符串等。本篇教程将详细介绍JavaScript中的...

    JavaScript字符串方法[参考].pdf

    JavaScript字符串方法是编程语言JavaScript中处理文本数据的重要组成部分。这些方法允许开发者进行各种操作,如组合字符串、查找子串、替换内容以及转换大小写。以下是对提到的一些关键字符串方法的详细解释: 1. `...

Global site tag (gtag.js) - Google Analytics