以前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
分享到:
相关推荐
随着ECMAScript标准的不断发展,ES6及之后版本引入了许多新的字符串处理方法,进一步增强了JavaScript字符串操作的能力: 1. **检查字符串开头或结尾** - `startsWith(searchString[, position])` 和 `endsWith...
在JavaScript中,split()函数是一个非常实用的字符串处理方法,用于将字符串分割成子字符串数组。标准的split()方法允许用户通过一个特定的分隔符来分割字符串,但在很多实际编程场景中,我们需要按照多个分隔符对...
本手册将深入探讨JavaScript中的字符串,这是编程中常用的数据类型,对于理解和操作文本至关重要。 一、字符串基础 在JavaScript中,字符串是不可变的,意味着一旦创建,其内容就不能更改。字符串可以用单引号(' ')...
在许多编程语言中,如Python、Java、JavaScript等,都提供了内置的字符串分割功能。这个功能允许我们将一个长字符串依据特定的分隔符切割成多个子字符串,从而方便我们进行数据解析、处理和分析。 在Python中,`...
在JavaScript中,`split()`函数是一个非常实用的字符串方法,用于将一个字符串分割成多个子字符串,并返回一个字符串数组。这个方法是基于指定的分隔符来切割原始字符串的。在深入探讨`split()`之前,我们需要理解...
标题中的“字符串中分离特定字符串隔开的字符串”就是一个典型的字符串处理问题。这里我们将详细探讨如何在Java(以及Android Studio)中实现这一功能,同时也会提供一些跨语言的思路。 首先,我们要理解的是,Java...
字符串分割,即将一个字符串分割为多个字符串,JavaScript 中给我们提供了一个非常方便的函数 `split()`: * `var myStr = "I,Love,You,Do,you,love,me"; var substrArray = myStr.split(","); // ["I", "Love", ...
根据提供的文件信息,这里将详细解释与JavaScript字符串相关的函数,并补充一些缺失或不清晰的部分,以便更好地理解每个函数的功能及用法。 ### JavaScript字符串函数大全 #### 1. Asc(x) - **功能**:返回字符的...
在实际应用中,你可能会遇到更复杂的场景,比如处理多字符分隔符、忽略空格、处理转义字符等,这些都是在字符串处理时需要考虑的问题。通过熟悉这些基础知识,你可以更有效地处理各种字符串处理任务。
在这个“JavaScript_字符串验证.zip”压缩包中,我们有两个文件:`说明.txt`和`validator.js_master.zip`,它们可能包含了关于JavaScript字符串验证的详细信息。 `说明.txt`可能提供了对整个压缩包内容的简要介绍,...
在Python中,可以使用内置的 `split()` 方法进行字符串分割,而在JavaScript中,可以使用 `split()` 函数或者正则表达式进行分割。 总的来说,理解并熟练掌握字符串处理技巧对于任何级别的程序员都至关重要。无论是...
在现代编程语言如JavaScript中,字符串处理是日常开发中极为常见的任务之一。本文将深入探讨几个常用的字符串处理函数,包括如何求取子字符串、进行字符串分割以及执行编码转换。这些功能在网页开发、数据处理和文本...
以下是一些关键的JavaScript字符串操作函数: 1. **concat()** - 这个函数用于连接两个或多个字符串,并返回一个新的字符串。例如: ```javascript var str1 = "Hello"; var str2 = "World"; var combined = ...
`split()` 是JavaScript中最常用的字符串转数组的方法。它通过指定分隔符将字符串分割成多个子字符串,并将结果放入一个数组中。例如: ```javascript let str = "Hello, World!"; let arr = str.split(", "); ...
### JavaScript字符串方法详解 #### 一、概述 在JavaScript中,字符串是一种常用的数据类型,用于表示文本信息。字符串可以通过多种方式进行操作,例如查找字符、连接字符串等。本篇教程将详细介绍JavaScript中的...
JavaScript字符串方法是编程语言JavaScript中处理文本数据的重要组成部分。这些方法允许开发者进行各种操作,如组合字符串、查找子串、替换内容以及转换大小写。以下是对提到的一些关键字符串方法的详细解释: 1. `...