Javascript有很多字符串的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺(jué)得API上說(shuō)的不全,MDN上又太多。。其實(shí)常用的就那幾個(gè),很多都可以用那幾個(gè)方法解出來(lái)。
很多方法中有兼容性的,在使用的時(shí)候,把兼容代碼復(fù)制粘貼即可。
先貼上來(lái)數(shù)組和字符串的方法的比較,我在學(xué)習(xí)的時(shí)候也是會(huì)混。所以做了小總結(jié)。之后就是數(shù)組方法和一些實(shí)例。如果有側(cè)邊欄就好了,看得就比較清楚。
數(shù)組 字符串
slice | slice substring 截取需要開(kāi)始和結(jié)束index的
splice | substr 截取需要開(kāi)始index和截取長(zhǎng)度的
concat | concat 都是連接,一個(gè)是連接數(shù)組,一個(gè)是連接字符串
indexOf | indexOf 搜索元素在不在里面,返回index值或者-1
join | split 這就是兩個(gè)反義詞啊,相互轉(zhuǎn)化的利器
- 截取方法中,字符串有三種方法slice / substring / substr ,數(shù)組方法有兩個(gè)slice / splice
其中字符串的slice 和 substring 是要開(kāi)始和結(jié)束的索引,substr 是要開(kāi)始索引和長(zhǎng)度
數(shù)組的slice是要開(kāi)始和結(jié)束索引,但是splice是要開(kāi)始索引和長(zhǎng)度- 搜索元素方法中,數(shù)組和字符串都有indexOf方法,但是字符串多出來(lái)兩種方法charAt和charCodeAt
其中indexOf是返回索引,charAt是返回索引對(duì)應(yīng)的值,charCodeAt是返回對(duì)應(yīng)值的ASCII碼值。- 數(shù)組的遍歷有4中方法,map,every,foreach,some,filter
其中foreach開(kāi)始就停不下來(lái),全部遍歷。every遍歷一個(gè)就判斷一下,true就繼續(xù)遍歷下一個(gè),false就跳出。map就是邊遍歷邊運(yùn)算。some返回的是布爾值,符合就是true,不符合就是false。filter返回的是符合元素組成的數(shù)組。- 增加數(shù)組元素,前面unshift,后面push
移除數(shù)組元素,前面shift,后面pop- 數(shù)組和字符串都有concat方法,各自連接各自的,是數(shù)組就連接到數(shù)組,字符串就連接成字符串
- 比較重要的兩個(gè)就是數(shù)組和字符串之間的轉(zhuǎn)化的兩個(gè)方法
join是數(shù)組轉(zhuǎn)字符串,split是字符串轉(zhuǎn)數(shù)組
字符串
查找字符串
charAt(返回字符)
str.charAt(index)
charAt()方法從一個(gè)字符串中返回指定的字符
index是0 ~ str.length-1 ,如果指定的index值超出了該范圍,則返回一個(gè)空字符串
-
輸出字符串中不同位置的字符
var anyString = "Brave new world"; console.log("index 0 is '" + anyString.charAt(0) + "'"); console.log("index 1 is '" + anyString.charAt(1) + "'"); console.log("index 2 is '" + anyString.charAt(2) + "'"); console.log("index 3 is '" + anyString.charAt(3) + "'"); console.log("index 4 is '" + anyString.charAt(4) + "'"); console.log("index 999 is '" + anyString.charAt(999) + "'"); //輸出 // index 0 is 'B' // index 1 is 'r' // index 2 is 'a' // index 3 is 'v' // index 4 is 'e' // index 999 is ''
charCodeAt(返回ASCII)
str.charCodeAt(index)
返回索引對(duì)應(yīng)的字符的ASCII表對(duì)應(yīng)的值,0-65535之間的整數(shù),超出范圍返回NaN
-
index : 0 ~ length-1,如果不是一個(gè)數(shù)值,則默認(rèn)為0
"ABC".charCodeAt(0) // returns 65
indexOf(返回索引)
str.indexOf(searchValue[, fromIndex])
searchValue 一個(gè)字符串表示被查找的值
-
fromIndex 可選。
- fromIndex < 0 則查找整個(gè)字符串(如同傳進(jìn)了 0)
- 如果 fromIndex >= str.length,則該方法返回 -1
- 如果被查找的字符串是一個(gè)空字符串,此時(shí)返回 str.length
-
找到第一個(gè)元素的位置,沒(méi)找到返回-1
"Hello apple".indexOf("Hello"); // return 0 "Hello apple".indexOf("Heloo"); // return -1 "Hello apple".indexOf("apple", 0); // return 6 "Hello apple".indexOf("apple", 6); // return 6 "Hello apple".indexOf("", 10); // return 10 "Hello apple".indexOf("", 11); // return 10 //區(qū)分大小寫(xiě) "Hello apple".indexOf("hello") // returns -1 //檢測(cè)是否存在某字符串 "Hello apple".indexOf("hello") !== -1; // true "Hello apple".indexOf("heloo") !== -1; // false
-
使用indexOf統(tǒng)計(jì)一個(gè)字符串中某個(gè)字母出現(xiàn)的次數(shù)
var str = 'To be, or not to be, that is the question.'; //計(jì)數(shù) var count = 0; //判斷str中有沒(méi)有e元素 var pos = str.indexOf('e'); //如果有e元素,循環(huán) while (pos !== -1) { //計(jì)數(shù)加一 count++; //從索引加1的位置開(kāi)始找e pos = str.indexOf('e', pos + 1); } console.log(count); // displays 4
lastIndexOf(返回索引)
str.lastIndexOf(searchValue[, fromIndex])
searchValue 表示被查找的值
-
fromIndex 從后面找。
- 默認(rèn)值為 str.length。如果為負(fù)值,則被看作 0。如果 fromIndex > str.length,則fromIndex被看作str.length
-
返回值沒(méi)找到為-1,找到的索引是從前往后的
"canal".lastIndexOf("a") // returns 3 "canal".lastIndexOf("a",2) // returns 1 "canal".lastIndexOf("a",0) // returns -1 "canal".lastIndexOf("x") // returns -1
截取字符串
slice(索引)
str.slice(beginSlice[, endSlice])
beginSlice 開(kāi)始的字符索引,如果是復(fù)數(shù),就strLength + beginSlice
endSlice 結(jié)束的字符索引??蛇x,如果省略直接到末尾,如果是負(fù)數(shù)就是strLength + endSlice
提取字符串,返回字符串,包括beginSlice,不包括endSlice
-
使用slice()創(chuàng)建一個(gè)新的字符串
var str1 = 'The morning is upon us.'; //從第五個(gè)開(kāi)始到不連倒數(shù)第二個(gè)結(jié)束 var str2 = str1.slice(4, -2); // returns 'morning is upon u' var str2 = str.slice(-3); // returns 'us.' var str2 = str.slice(-3, -1); // returns 'us' var str2 = str.slice(0, -1); // returns 'The morning is upon us' console.log(str2); // OUTPUT: morning is upon u
substring(索引)
str.substring(indexStart[, indexEnd])
indexStart 開(kāi)始索引,0 ~ str.length
indexEnd 結(jié)束索引,可選。 0 ~ str.length,省略則到字符串結(jié)束
-
兩個(gè)參數(shù)小于0或者為NaN,被當(dāng)作0,大于length,則當(dāng)作length。如果開(kāi)始大于結(jié)束,則結(jié)果和參數(shù)調(diào)換一樣
str.substring(1, 0) == str.substring(0, 1)
-
截取開(kāi)始到結(jié)束的字符串,返回新數(shù)組
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));
-
替換一個(gè)字符串的子字符串
//該例結(jié)尾調(diào)用的函數(shù)將 "Brave New World" 變成了 "Brave New Web" 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"); //需要注意的是,如果 oldS 是 newS 的子字符串將會(huì)導(dǎo)致死循環(huán)。例如,嘗試把 "World" 替換成 "OtherWorld"。一個(gè)更好的方法如下: function replaceString(oldS, newS,fullS){ return fullS.split(oldS).join(newS); } //更簡(jiǎn)單的要用replace
substr(長(zhǎng)度)
str.substr(start[, length])
start 開(kāi)始提取字符的位置。如果為負(fù)值,則被看strLength + start
length 可選,提取的字符數(shù)。不寫(xiě)到結(jié)尾
-
返回新字符串
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):
-
兼容,Microsoft's JScript 不支持負(fù)的 start 索引
// 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); }
轉(zhuǎn)換大小寫(xiě)
toLocaleUpperCase
str.toLocaleUpperCase()
-
返回小寫(xiě)轉(zhuǎn)大寫(xiě)的字符串
console.log('alphabet'.toLocaleUpperCase()); // 'ALPHABET'
toLocaleLowerCase
str.toLocaleLowerCase()
-
返回大寫(xiě)轉(zhuǎn)小寫(xiě)的字符串
console.log('ALPHABET'.toLocaleLowerCase()); // 'alphabet' console.log('中文簡(jiǎn)體 zh-CN || zh-Hans'.toLocaleLowerCase()); // '中文簡(jiǎn)體 zh-cn || zh-hans'
替換字符串
replace(生產(chǎn)環(huán)境不建議)
str.replace(regexp|substr,newSubStr|function)
regexp 正則對(duì)象或者其字面量,在進(jìn)行全局替換時(shí),要有g(shù)標(biāo)志
substr 被替換的字符串
-
newSubStr 替換的新字符串(可以插入特殊字符串)
| 變量名 | 代表的值 |
| $$ | 插入一個(gè)"$" |
| $& | 插入匹配的子串 |
| $` | 插入當(dāng)前匹配的子串左邊的內(nèi)容 |
| $' | 插入當(dāng)前匹配的子串右邊的內(nèi)容 |
| $n | 假如第一個(gè)參數(shù)的正則對(duì)象,n是一個(gè)小于100的非負(fù)整數(shù),那么插入第n個(gè)括號(hào)匹配的字符串 | function 創(chuàng)建新字符串的函數(shù),函數(shù)返回值是替換的內(nèi)容,但是特殊替換的參數(shù)不能使用
-
返回值是被替換過(guò)的新的字符串,不改變本身
//下面的例子將會(huì)使 newString 'abc12345#$*%' 變成'abc - 12345 - #$*%' function replacer(match, p1, p2, p3, offset, string) { // p1 is nondigits, p2 digits, and p3 non-alphanumerics return [p1, p2, p3].join(' - '); } var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
-
使用正則表達(dá)式
//replace() 中使用了正則表達(dá)式及忽略大小寫(xiě)標(biāo)示。 var str = 'Twas the night before Xmas...'; var newstr = str.replace(/xmas/i, 'Christmas'); console.log(newstr); // Twas the night before Christmas...
-
使用global和ignore選項(xiàng)
//下面的例子中,正則表達(dá)式包含有全局替換(g)和忽略大小寫(xiě)(i)的選項(xiàng),這使得replace方法用'oranges'替換掉了所有出現(xiàn)的"apples". var re = /apples/gi; var str = "Apples are round, and apples are juicy."; var newstr = str.replace(re, "oranges"); console.log(newstr); // oranges are round, and oranges are juicy.
-
交換字符串中的兩個(gè)單詞
//下面的例子演示了如何交換一個(gè)字符串中兩個(gè)單詞的位置,這個(gè)腳本使用$1 和 $2 代替替換文本 var re = /(\w+)\s(\w+)/; var str = "John Smith"; var newstr = str.replace(re, "$2, $1"); // Smith, John console.log(newstr);
-
使用行內(nèi)函數(shù)來(lái)修改匹配到的字符
//所有出現(xiàn)的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě),并且在匹配位置前加一個(gè)連字符。重要的是,在返回一個(gè)替換了的字符串前需要在匹配元素前需要進(jìn)行添加操作。 //在返回前,替換函數(shù)允許匹配片段作為參數(shù),并且將它和連字符進(jìn)行連接作為新的片段。 function styleFormat(name) { function lower(match) { return '-' + match.toLowerCase(); } return name.replace(/[A-Z]/g, lower); } styleFormat('borderTop'); //返回 'border-top' //因?yàn)槲覀兿朐谧罱K的替換中進(jìn)一步轉(zhuǎn)變匹配結(jié)果,所以我們必須使用一個(gè)函數(shù)。這迫使我們?cè)谑褂胻oLowerCase()方法前進(jìn)行評(píng)估。如果我們嘗試不用一個(gè)函數(shù)進(jìn)行匹配,那么使用toLowerCase() 方法將不會(huì)有效。 var newString = propertyName.replace(/[A-Z]/g, '-' + '$&'.toLowerCase()); //報(bào)錯(cuò) //這是因?yàn)?$&.toLowerCase() 會(huì)先被解析成字符串字面量(這會(huì)導(dǎo)致相同的$&)而不是當(dāng)作一個(gè)模式。
拼接字符串
concat
str.concat(string2, string3[, ..., stringN])
將一個(gè)或多個(gè)字符串和原字符串合并,并形成一個(gè)新的字符串返回
-
強(qiáng)烈建議使用賦值操作符(+,+=)代替concat方法
var hello = "Hello, "; console.log(hello.concat("Kevin", " have a nice day.")); /* Hello, Kevin have a nice day. */
- 測(cè)試比較 (+ > concat + join) 推薦使用
比較字符串
locateCompare
referenceStr.localeCompare(compareString[, locales[, options]])
referenceStr 引用字符串
compareStr 比較字符串
locales指的是比較的語(yǔ)言,options比較標(biāo)準(zhǔn)。這兩個(gè)參數(shù)很多瀏覽器不支持,所以不用
-
如果引用字符串在比較字符串前面,返回-1,當(dāng)引用字符串在比較字符串后面時(shí)返回1。相同位置返回0(不同瀏覽器的原因,只關(guān)注正反即可)
//一個(gè)字符一個(gè)字符比較 'a'.localeCompare('c'); // -2 or -1 (or some other negative value) 'check'.localeCompare('against'); // 2 or 1 (or some other positive value) 'a'.localeCompare('a'); // 0
-
檢查瀏覽器對(duì)擴(kuò)展參數(shù)的支持
//locales 和 options 參數(shù)還沒(méi)有被所有閱覽器所支持。檢查是否被支持, 使用 "i" 參數(shù)判斷是否有異常 RangeError拋出 function localeCompareSupportsLocales() { try { 'foo'.localeCompare('bar', 'i'); } catch (e) { return e.name === 'RangeError'; } return false; }
去空格
trim
str.trim()
- 刪除字符串兩端的空白字符,
-
返回一個(gè)新字符串
var orig = ' foo '; console.log(orig.trim()); // 'foo'
-
兼容問(wèn)題,IE8及以下不可用
if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; }
切割字符串
split(數(shù)組)
str.split([separator[, limit]])
將string對(duì)象分割成字符串?dāng)?shù)組,[]表示參數(shù)可選
如果str是空字符串,split返回的是一個(gè)包含空字符串的數(shù)組,而不是一個(gè)空數(shù)組
-
separator 可以是一個(gè)字符串或正則表達(dá)式
- 如果沒(méi)有separator則返回整個(gè)字符串的數(shù)組形式
- 如果separator是空字符串,則str將會(huì)把原字符串中每個(gè)字符的數(shù)組形式返回
- 如果有字符串和表達(dá)式,則匹配字符串,separator會(huì)從字符串中被移除,按照字符串分隔成子串,分別放入數(shù)組
-
limit 一個(gè)整數(shù),限定返回的分割片段的數(shù)量。split方法仍然分割每一個(gè)匹配的separator,但是返回的數(shù)組只會(huì)截取最多l(xiāng)imit個(gè)元素。
"Webkit Moz O ms Khtml".split( " " ) // ["Webkit", "Moz", "O", "ms", "Khtml"]
-
限制返回值中分割元素?cái)?shù)量
var myString = "Hello World. How are you doing?"; var splits = myString.split(" ", 3); console.log(splits); //["Hello", "World.", "How"] length = 3
-
捕獲括號(hào)
// separator 包含捕獲括號(hào)(capturing parentheses),則其匹配結(jié)果將會(huì)包含在返回的數(shù)組中 var myString = "Hello 1 word. Sentence number 2."; var splits = myString.split(/(\d)/); console.log(splits); //[Hello ,1, word. Sentence number ,2,.]
?copyright burning.