字符串在JS中是一種基礎類型,也是很長用的一種類型,但是他有很多自己的方法可以使用,下面進行一下總結。
-
length: 獲取字符串的長度
'hello world'.length // 11
-
charAt(): 返回在指定位置的字符
'hello world'.charAt(4) // o
-
charCodeAt(): 返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。
'hello world'.charCodeAt(4) // 111
4.concat():連接兩個或多個字符串
'hello world'.concat('123', '456') // hello world123456
一般使用
+
進行字符串的拼接,在ES6中可以使用``
模版處理字符串拼接問題,更高效,方便。
-
fromCharCode(): 可接受一個指定的 Unicode 值,然后返回一個字符串,是charCodeAt的逆過程。
String.fromCharCode(72,69,76,76,79) // 'HELLO'
-
indexOf(): 可返回某個指定的字符串值在字符串中首次出現的位置
'hello world'.indexOf('l', 1) // 2
-
toLowerCase(): 把字符串轉換為小寫
'HELLO WORLD'.toLowerCase() // hello world
-
toUpperCase() : 把字符串轉換為大寫。
'hello world'.toUpperCase() // HELLO WORLD
以上方法比較使用起來比較容易,下面介紹的方法使用起來稍微復雜,replace
, 但是也更長用到:
-
split(): 把一個字符串分割成字符串數組
用法:stringObject.split(separator,howmany)
separator
必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。
howmany
可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多于這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。'hello world'.split(' ') // ['hello', 'world'] 'hello world'.split(/\s/) // ['hello', 'world'] 'hello world'.split(' ' , 1) // ['hello']
String.split() 執行的操作與Array.join 執行的操作是相反的
-
seach(): 用于檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串
'hello world'.search('l') // 2 'hello world'.search(/\s/) // 5
search()
方法不執行全局匹配,它將忽略標志g
。它同時忽略regexp
的lastIndex
屬性,并且總是從字符串的開始進行檢索,這意味著它總是返回stringObject
的第一個匹配的位置。
- substring(),slice()和substr()
這兩個方法很相似,在這里對比說明一下。
substring(start, stop)
: 提取字符串中兩個指定的索引號之間的字符,不接受負參數
substr(start, length)
: 從起始索引號提取字符串中指定數目的字符
slice(start,end)
: 可提取字符串的某個部分,并以新的字符串返回被提取的部分
start
:要抽取的片斷的起始下標。如果是負數,則該參數規定的是從字符串的尾部開始算起的位置。也就是說,-1 指字符串的最后一個字符,-2 指倒數第二個字符,以此類推
end
: 緊接著要抽取的片段的結尾的下標。若未指定此參數,則要提取的子串包括 start 到原字符串結尾的字符串。如果該參數是負數,那么它規定的是從字符串的尾部開始算起的位置。
'01234567'.slice(1, 4) // 123
'01234567'.slice(-4) // 4567
其他情況請自己嘗試,大同小異。
String 對象的方法 slice()、substring() 和 substr() (不建議使用)都可返回字符串的指定部分。slice() 比 substring() 要靈活一些,因為它允許使用負數作為參數。slice() 與 substr() 有所不同,因為它用兩個字符的位置來指定子串,而 substr() 則用字符位置和長度來指定子串。
-
match(): 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配
// 正則帶g var url = 'http://www.baidu.com?a=1&b=2&c=3'; var reg = /([^?&=]+)=([^?&=])*/g; var result = url.match(reg); console.log(result); //["a=1", "b=2", "c=3"] // 正則不帶g var url = 'http://www.baidu.com?a=1&b=2&c=3'; var reg = /([^?&=]+)=([^?&=])*/; var result = url.match(reg); console.log(result); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"
13.replace(): 用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串
用法: stringObject.replace(regexp/substr,replacement)
regexp/substr
必需。規定子字符串或要替換的模式的 RegExp 對象。
請注意,如果該值是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉換為 RegExp 對象。
replacement
必需。一個字符串值。規定了替換文本或生成替換文本的函數。
如果
regexp
具有全局標志g
,那么replace()
方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。
字符替換文本
$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位于匹配子串左側的文本。
$' 位于匹配子串右側的文本。
$$ 直接量符號。
'hello world'.replace(/(w)orld/, '$1!') // hello w!
'hello world'.replace(/(w)orld$/, '$&!') // hello world!
'hello world'.replace(/(w)orld$/, '$`!') // hello hello !
'hello world'.replace(/(w)orld/, "$'!") // hello !
'hello world'.replace(/(w)orld/, "$$!") //hello $!
如果第二個參數傳入了一個函數,在這種情況下,每個匹配都調用該函數,它返回的字符串將作為替換文本使用。該函數的第一個參數是匹配模式的字符串。接下來的參數是與模式中的子表達式匹配的字符串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了匹配在 stringObject 中出現的位置。最后一個參數是 stringObject 本身。
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);
console.log(newString); // abc - 12345 - #$*%`