JavaScript 字符串方法
字符串方法幫助您處理字符串。
字符串方法和屬性
原始值,比如“Bill Gates”,無法擁有屬性和方法(因為它們不是對象)。
但是通過 JavaScript,方法和屬性也可用于原始值,因為在執行方法和屬性時 JavaScript 將原始值視為對象。
查找字符串中的字符串
indexOf()
方法返回字符串中指定文本首次出現的索引(位置):
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.indexOf("China");
JavaScript 從零計算位置。
0 是字符串中的第一個位置,1 是第二個,2 是第三個 ...
lastIndexOf()
方法返回指定文本在字符串中最后一次出現的索引:
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.lastIndexOf("China");
如果未找到文本, indexOf()
和 lastIndexOf()
均返回 -1。
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.indexOf("USA");
兩種方法都接受作為檢索起始位置的第二個參數。
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.indexOf("China", 18);
lastIndexOf()
方法向后進行檢索(從尾到頭),這意味著:假如第二個參數是 50,則從位置 50 開始檢索,直到字符串的起點。
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.lastIndexOf("China", 50);
檢索字符串中的字符串
search()
方法搜索特定值的字符串,并返回匹配的位置:
實例
var str = "The full name of China is the People's Republic of China."; var pos = str.search("locate");
您注意到了嗎?
兩種方法,indexOf()
與 search()
,是相等的。
這兩種方法是不相等的。區別在于:
- search() 方法無法設置第二個開始位置參數。
- indexOf() 方法無法設置更強大的搜索值(正則表達式)。
您將在正則表達式的章節學習到這些更強大的檢索值。
提取部分字符串
有三種提取部分字符串的方法:
- slice(start, end)
- substring(start, end)
- substr(start, length)
slice() 方法
slice()
提取字符串的某個部分并在新字符串中返回被提取的部分。
該方法設置兩個參數:起始索引(開始位置),終止索引(結束位置)。
這個例子裁剪字符串中位置 7 到位置 13 的片段:
實例
var str = "Apple, Banana, Mango"; var res = str.slice(7,13);
res 的結果是:
Banana
如果某個參數為負,則從字符串的結尾開始計數。
這個例子裁剪字符串中位置 -12 到位置 -6 的片段:
實例
var str = "Apple, Banana, Mango"; var res = str.slice(-13,-7);
res 的結果是:
Banana
如果省略第二個參數,則該方法將裁剪字符串的剩余部分:
實例
var res = str.slice(7);
或者從結尾計數:
實例
var res = str.slice(-13);
提示:負值位置不適用 Internet Explorer 8 及其更早版本。
substring() 方法
substring()
類似于 slice()
。
不同之處在于 substring()
無法接受負的索引。
實例
var str = "Apple, Banana, Mango"; var res = str.substring(7,13);
res 的結果是:
Banana
如果省略第二個參數,則該 substring()
將裁剪字符串的剩余部分。
substr() 方法
substr()
類似于 slice()
。
不同之處在于第二個參數規定被提取部分的長度。
實例
var str = "Apple, Banana, Mango"; var res = str.substr(7,6);
res 的結果是:
Banana
如果省略第二個參數,則該 substr() 將裁剪字符串的剩余部分。
實例
var str = "Apple, Banana, Mango"; var res = str.substr(7);
res 的結果是:
Banana, Mango
如果首個參數為負,則從字符串的結尾計算位置。
實例
var str = "Apple, Banana, Mango"; var res = str.substr(-5);
res 的結果是:
Mango
第二個參數不能為負,因為它定義的是長度。
替換字符串內容
replace()
方法用另一個值替換在字符串中指定的值:
實例
str = "Please visit Microsoft!"; var n = str.replace("Microsoft", "W3School");
replace()
方法不會改變調用它的字符串。它返回的是新字符串。
默認地,replace()
只替換首個匹配:
實例
str = "Please visit Microsoft and Microsoft!"; var n = str.replace("Microsoft", "W3School");
默認地,replace()
對大小寫敏感。因此不對匹配 MICROSOFT:
實例
str = "Please visit Microsoft!"; var n = str.replace("MICROSOFT", "W3School");
如需執行大小寫不敏感的替換,請使用正則表達式 /i
(大小寫不敏感):
實例
str = "Please visit Microsoft!"; var n = str.replace(/MICROSOFT/i, "W3School");
請注意正則表達式不帶引號。
如需替換所有匹配,請使用正則表達式的 g
標志(用于全局搜索):
實例
str = "Please visit Microsoft and Microsoft!"; var n = str.replace(/Microsoft/g, "W3School");
您將在 JavaScript 正則表達式這一章學到更多有關正則表達式的內容。
轉換為大寫和小寫
通過 toUpperCase()
把字符串轉換為大寫:
實例
var text1 = "Hello World!"; // 字符串 var text2 = text1.toUpperCase(); // text2 是被轉換為大寫的 text1
通過 toLowerCase()
把字符串轉換為小寫:
實例
var text1 = "Hello World!"; // 字符串 var text2 = text1.toLowerCase(); // text2 是被轉換為小寫的 text1
concat() 方法
concat()
連接兩個或多個字符串:
實例
var text1 = "Hello"; var text2 = "World"; text3 = text1.concat(" ",text2);
concat()
方法可用于代替加運算符。下面兩行是等效的:
實例
var text = "Hello" + " " + "World!"; var text = "Hello".concat(" ","World!");
所有字符串方法都會返回新字符串。它們不會修改原始字符串。
正式地說:字符串是不可變的:字符串不能更改,只能替換。
String.trim()
trim()
方法刪除字符串兩端的空白符:
實例
var str = " Hello World! "; alert(str.trim());
警告:Internet Explorer 8 或更低版本不支持 trim()
方法。
如需支持 IE 8,您可搭配正則表達式使用 replace()
方法代替:
實例
var str = " Hello World! "; alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
您還可以使用上面的 replace 方案把 trim 函數添加到 JavaScript String.prototype:
實例
if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; var str = " Hello World! "; alert(str.trim());
提取字符串字符
這是兩個提取字符串字符的安全方法:
- charAt(position)
- charCodeAt(position)
charCodeAt() 方法
charCodeAt()
方法返回字符串中指定索引的字符 unicode 編碼:
實例
var str = "HELLO WORLD"; str.charCodeAt(0); // 返回 72
屬性訪問(Property Access)
ECMAScript 5 (2009) 允許對字符串的屬性訪問 [ ]:
實例
var str = "HELLO WORLD"; str[0]; // 返回 H
使用屬性訪問有點不太靠譜:
- 不適用 Internet Explorer 7 或更早的版本
- 它讓字符串看起來像是數組(其實并不是)
- 如果找不到字符,
[ ]
返回undefined
,而charAt()
返回空字符串。 - 它是只讀的。
str[0] = "A"
不會產生錯誤(但也不會工作!)
實例
var str = "HELLO WORLD"; str[0] = "A"; // 不產生錯誤,但不會工作 str[0]; // 返回 H
提示:如果您希望按照數組的方式處理字符串,可以先把它轉換為數組。
把字符串轉換為數組
可以通過 split()
將字符串轉換為數組:
實例
var txt = "a,b,c,d,e"; // 字符串 txt.split(","); // 用逗號分隔 txt.split(" "); // 用空格分隔 txt.split("|"); // 用豎線分隔
如果省略分隔符,被返回的數組將包含 index [0] 中的整個字符串。
如果分隔符是 "",被返回的數組將是間隔單個字符的數組:
實例
var txt = "Hello"; // 字符串 txt.split(""); // 分隔為字符