String.prototype.slice()
slice() 方法提取一个字符串的一部分,并返回一新的字符串。
str.slice(beginSlice[, endSlice])
beginSlice
从该索引(以 0 为基数)处开始提取原字符串中的字符。如果值为负数,会被当做 sourceLength + beginSlice 看待,这里的sourceLength 是字符串的长度 (例如, 如果beginSlice 是 -3 则看作是: sourceLength - 3)
endSlice
可选。在该索引(以 0 为基数)处结束提取字符串。如果省略该参数,slice会一直提取到字符串末尾。如果该参数为负数,则被看作是 sourceLength + endSlice,这里的 sourceLength 就是字符串的长度(例如,如果 endSlice 是 -3,则是, sourceLength - 3)。
返回一个从原字符串中提取出来的新字符串
slice 不修改原字符串,只会返回一个包含了原字符串中部分字符的新字符串。
注意:slice() 提取的新字符串包括beginSlice但不包括 endSlice。
var str1 = 'The morning is upon us.'; var str2 = str1.slice(4, -2); console.log(str2); // OUTPUT: morning is upon u
给 slice() 传入负值索引
var str = 'The morning is upon us.'; str.slice(-3); // returns 'us.' str.slice(-3, -1); // returns 'us' str.slice(0, -1); // returns 'The morning is upon us'
自己实现简单的slice:
String.prototype.slice = function (start) { var length = this == null ? 0 : this.length; var end; if (!length) { return ''; } start = start == null ? 0 : start; if (start < 0) { start = -start > length ? 0 : (start + length); } end = arguments[1] == null ? length : arguments[1]; if (end < 0) { end = -end > length ? 0 : (end + length); } end = end > length ? length : end; length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; var result = ''; var index = -1; while (++index < length) { result += this[start + index]; } return result; }
String.prototype.substr()
substr() 方法返回一个字符串中从指定位置开始到指定字符数的字符。
str.substr(start[, length])
start
开始提取字符的位置。如果为负值,则被看作 strLength + start,其中 strLength 为字符串的长度(例如,如果 start 为 -3,则被看作 strLength + (-3))。
length
可选。提取的字符数。
返回从字符串中提取出的字符串。
如果 start 为正值,且大于或等于字符串的长度,则 substr 返回一个空字符串。
如果 start 为负值,则 substr 把它作为从字符串末尾开始的一个字符索引。如果 start 为负值且 abs(start) 大于字符串的长度,则 substr 使用 0 作为开始提取的索引。注意负的 start 参数不被 Microsoft JScript 所支持。
如果 length 为 0 或负值,则 substr 返回一个空字符串。如果忽略 length,则 substr 提取字符,直到字符串末尾。
var str = "abcdefghij"; console.log("(1,2): " + str.substr(1,2)); // (1,2): bc console.log("(-3,2): " + str.substr(-3,2)); // (-3,2): hi console.log("(-3): " + str.substr(-3)); // (-3): hij console.log("(1): " + str.substr(1)); // (1): bcdefghij console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab console.log("(20, 2): " + str.substr(20,2)); // (20, 2):
polyfill
Microsoft's JScript 不支持负的 start 索引。如果你想充分利用该方法的功能,则需要使用下面的兼容性代码修复此 bug:
// only run when the substr function is broken if ('ab'.substr(-1) != 'b') { /** * Get the substring of a string * @param {integer} start where to start the substring * @param {integer} length how many characters to return * @return {string} */ String.prototype.substr = function(substr) { return function(start, length) { // did we get a negative start, calculate how much it is // from the beginning of the string if (start < 0) start = this.length + start; // call the original function return substr.call(this, start, length); } }(String.prototype.substr); }
自己实现简单的substr:
String.prototype.substr = function (start) { var length = this.length; if (length == 0) { return ''; } start = start == null ? 0 : start; if (start < 0) { start = -start > length ? 0 : (start + length); } start >>>= 0; length = arguments[1] === undefined ? this.length : arguments[1]; if (length < 1) { return ''; } var index = -1; var result = ''; while (++index < length) { if ((start + index) == this.length) { return result; } result += this[start + index]; } return result; }
String.prototype.substring()
substring() 方法返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集。
str.substring(indexStart[, indexEnd])
indexStart
一个 0 到字符串长度之间的整数。
indexEnd
可选。一个 0 到字符串长度之间的整数。
返回包含给定字符串的指定部分的新字符串。
substring 提取从 indexStart 到 indexEnd(不包括)之间的字符。特别地:
如果 indexStart 等于 indexEnd,substring 返回一个空字符串。
如果省略 indexEnd,substring 提取字符一直到字符串末尾。
如果任一参数小于 0 或为 NaN,则被当作 0。
如果任一参数大于 stringName.length,则被当作 stringName.length。
如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样。见下面的例子。
红字是String.prototype.substring 与 String.prototype.slice 的区别。
var anyString = "Mozilla"; // 输出 "Moz" console.log(anyString.substring(0,3)); console.log(anyString.substring(3,0)); console.log(anyString.substring(3,-3)); console.log(anyString.substring(3,NaN)); console.log(anyString.substring(-2,3)); console.log(anyString.substring(NaN,3)); // 输出 "lla" console.log(anyString.substring(4,7)); console.log(anyString.substring(7,4)); // 输出 "" console.log(anyString.substring(4,4)); // 输出 "Mozill" console.log(anyString.substring(0,6)); // 输出 "Mozilla" console.log(anyString.substring(0,7)); console.log(anyString.substring(0,10));
例子:替换一个字符串的子字符串
function replaceString(oldS, newS, fullS) { // Replaces oldS with newS in the string fullS for (var i = 0; i < fullS.length; i++) { if (fullS.substring(i, i + oldS.length) == oldS) { fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length); } } return fullS; } replaceString("World", "Web", "Brave New World"); //"Brave New World" 变成了 "Brave New Web"
需要注意的是,如果 oldS 是 newS 的子字符串将会导致死循环。例如,尝试把 "World" 替换成 "OtherWorld"。一个更好的方法如下:
function replaceString(oldS, newS,fullS){ return fullS.split(oldS).join(newS); }
自己实现简单的substring:
String.prototype.substring = function (start) { var end; start = Number(start); start = start == start ? start : 0; if (start < 0) { start = 0; } if (start > this.length) { start = this.length; } start >>>= 0; if (arguments.length > 1) { end = Number(arguments[1]); } else { end = this.length; } end = end == end ? end : 0; if (end < 0) { end = 0; } if (end > this.length) { end = this.length; } end >>>= 0; if (start > end) { var temp = start; start = end; end = temp; } var length = end - start; var result = ''; var index = -1; while (++index < length) { result += this[start + index]; } return result; }
来源:https://www.cnblogs.com/hahazexia/p/9262683.html