`
deng131
  • 浏览: 661739 次
  • 性别: 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中字符串分割函数split用法实例

    本文实例讲述了JavaScript中字符串分割函数split用法。分享给大家供大家参考。具体如下: 先来看下面这段代码: [removed] var str="How are you doing today?" [removed](str.split(" ") + " ") [removed](str....

    JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)

    主要介绍了JavaScript字符串对象split方法入门实例,split方法用于把字符串分割成数组,需要的朋友可以参考下

    JavaScript利用split函数按规定截取字符串(获取邮箱用户名)

    一个JavaScript基础技巧,根据一串字串中规定的字符,获取该字符以左或以右的字符串,以本例中的电子邮箱为例,它可以获取邮箱的用户名,而将用户名以外的字符抛弃掉,本实例应该是比较实用的。 JavaScript截取...

    JavaScript实现字符串与日期的互相转换及日期的格式化

    字符串转日期、日期转字符串 // 2014-02-25 /** * 字符串转时间(yyyy-MM-dd HH:mm:ss) * result (分钟) */ stringToDate : function(fDate){ var fullDate = fDate.split("-"); return new Date...

    JavaScript拆分字符串时产生空字符的解决方案

    在上面这个问题中,题主使用正则表达式对字符串进行分割时产生了多个空字符串””,代码如下: 代码如下: ‘张sdf四上法asdf翁芬aa33网s’.split(/([\u4e00-\u9fa5]{1})/gi); //输出[“”, “张”, “sdf”, “四”...

    JavaScript截取、切割字符串的技巧

    对于字符串的切割截取平时所用可能不是特别多,而且分的比较细,所以自备自查。有备无患。 由于之前所有均在一个demo测试,若是哪里打错了,敬请谅解。一些其余属性找时间继续添加。 1.函数:split() 功能:使用...

    javascript实现的字符串转换成数组操作示例

    本文实例讲述了javascript实现的字符串转换成数组操作。分享给大家供大家参考,具体如下: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;www.jb51.net ...

    javascript实现字符串反转的方法

    本文实例讲述了javascript实现字符串反转的方法。分享给大家供大家参考。具体实现方法如下: //变量交换 方法 var a=0,b=1,c=2; a=[b,b=c,c=a][0]; //正文 var array='abcdefgh'; function Reverse(arr){ var arr1...

    javascript实现获取字符串hash值

    性能很高的计算字符串或文件hash值的函数,比md5速度快得多,自己一直用着,重复的几率为很底,一般的应用足够, var I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split...

    javascript字符串替换及字符串分割示例代码

    JS(JavaScript)字符串替换函数(有点像PHP的preg_replace) str.replace(‘xxx’, ‘yyyy’); 替换第一个 str.replace(/xxx/g, ‘yyyy’); 替换全部 字符串分割(类似PHP的分割函数) 代码如下: var test = ‘a-b-c-...

    JavaScript 字符串与数组转换函数[不用split与join]

    两个自定义的实现字符串与数组相互转换的js函数,希望能对大家有用: 代码如下:function StringToArray(str,substr) { /* 函数功能:字符串按照指定字符串分割转换为数组 参数: str :需转换的字符串 substr:分割字符...

    浅谈javascript中遇到的字符串对象处理

    在javascript中对参数处理: [removed] function getParam() { urlInfo=[removed].href; //获取当前页面的url intLen=urlInfo.length; //获取url的长度 offset=urlInfo.indexOf(?); //设置参数字符串开始的位置 ...

    JavaScript中split() 使用方法汇总

    本文向大家重点讲解一下Javascript中split函数使用,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回,相信本文介绍你对split函数的用法有明确的认识。

    JavaScript 一道字符串分解的题目

    则返回 b={‘name’:’zhiyelee’,’blog’:’www.tsnrose.com’} 当时由于时间比较短,实现的有些问题,回来后想了一下,总结如下: 我想到了两种思路,一种是使用正则表达式,第二种是使用字符串的split函数。...

    JS中split()用法(将字符串按指定符号分割成数组)

    //在Javascript脚本中,将字符串按指定符号进行分割成数组用split()的方法 //格式StringObject.split( char [,howmany]); //char: 必需。字符串或正则表达式howmany: 可选。 //该参数可指定返回的...

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    从中截取字符串.asp 从中截取字符串 切分字符串.asp 切分字符串 删除字符串前后导空格.asp 删除字符串前导空格.asp 删除字符串后导空格.asp 反向截取字符串.asp ...

    js split 的用法和定义 js split分割字符串成数组的实例代码

    关于js split的用法其它也不多说什么,下面直接举例给大家看看 代码如下: [removed] str=”2... //分割后的字符输出 } [removed] 输出结果就是 2 2 3 5 6 6 js split就是将一字符串以特定的字符分割成多个字符串,大家应

Global site tag (gtag.js) - Google Analytics