以前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用法。分享给大家供大家参考。具体如下: 先来看下面这段代码: [removed] var str="How are you doing today?" [removed](str.split(" ") + " ") [removed](str....
主要介绍了JavaScript字符串对象split方法入门实例,split方法用于把字符串分割成数组,需要的朋友可以参考下
一个JavaScript基础技巧,根据一串字串中规定的字符,获取该字符以左或以右的字符串,以本例中的电子邮箱为例,它可以获取邮箱的用户名,而将用户名以外的字符抛弃掉,本实例应该是比较实用的。 JavaScript截取...
字符串转日期、日期转字符串 // 2014-02-25 /** * 字符串转时间(yyyy-MM-dd HH:mm:ss) * result (分钟) */ stringToDate : function(fDate){ var fullDate = fDate.split("-"); return new Date...
在上面这个问题中,题主使用正则表达式对字符串进行分割时产生了多个空字符串””,代码如下: 代码如下: ‘张sdf四上法asdf翁芬aa33网s’.split(/([\u4e00-\u9fa5]{1})/gi); //输出[“”, “张”, “sdf”, “四”...
对于字符串的切割截取平时所用可能不是特别多,而且分的比较细,所以自备自查。有备无患。 由于之前所有均在一个demo测试,若是哪里打错了,敬请谅解。一些其余属性找时间继续添加。 1.函数:split() 功能:使用...
本文实例讲述了javascript实现的字符串转换成数组操作。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net ...
本文实例讲述了javascript实现字符串反转的方法。分享给大家供大家参考。具体实现方法如下: //变量交换 方法 var a=0,b=1,c=2; a=[b,b=c,c=a][0]; //正文 var array='abcdefgh'; function Reverse(arr){ var arr1...
性能很高的计算字符串或文件hash值的函数,比md5速度快得多,自己一直用着,重复的几率为很底,一般的应用足够, var I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split...
JS(JavaScript)字符串替换函数(有点像PHP的preg_replace) str.replace(‘xxx’, ‘yyyy’); 替换第一个 str.replace(/xxx/g, ‘yyyy’); 替换全部 字符串分割(类似PHP的分割函数) 代码如下: var test = ‘a-b-c-...
两个自定义的实现字符串与数组相互转换的js函数,希望能对大家有用: 代码如下:function StringToArray(str,substr) { /* 函数功能:字符串按照指定字符串分割转换为数组 参数: str :需转换的字符串 substr:分割字符...
在javascript中对参数处理: [removed] function getParam() { urlInfo=[removed].href; //获取当前页面的url intLen=urlInfo.length; //获取url的长度 offset=urlInfo.indexOf(?); //设置参数字符串开始的位置 ...
本文向大家重点讲解一下Javascript中split函数使用,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回,相信本文介绍你对split函数的用法有明确的认识。
则返回 b={‘name’:’zhiyelee’,’blog’:’www.tsnrose.com’} 当时由于时间比较短,实现的有些问题,回来后想了一下,总结如下: 我想到了两种思路,一种是使用正则表达式,第二种是使用字符串的split函数。...
//在Javascript脚本中,将字符串按指定符号进行分割成数组用split()的方法 //格式StringObject.split( char [,howmany]); //char: 必需。字符串或正则表达式howmany: 可选。 //该参数可指定返回的...
从中截取字符串.asp 从中截取字符串 切分字符串.asp 切分字符串 删除字符串前后导空格.asp 删除字符串前导空格.asp 删除字符串后导空格.asp 反向截取字符串.asp ...
关于js split的用法其它也不多说什么,下面直接举例给大家看看 代码如下: [removed] str=”2... //分割后的字符输出 } [removed] 输出结果就是 2 2 3 5 6 6 js split就是将一字符串以特定的字符分割成多个字符串,大家应