JS字符串方法總結(jié)
1. length 屬性返回字符串的長(zhǎng)度
const str = '1234567'
console.log(str.length)
2. indexOf() 方法返回字符串中指定文本 首次 出現(xiàn)的索引
3. lastIndexOf() 方法返回字符串中指定文本 最后 出現(xiàn)的索引
4. includes() 方法返回 true false
const str = "China"
const result0 = str.indexOf('China') // 0
const result1 = str.indexOf('C') // 0
const result2 = str.indexOf('w') // 不包含 返回 -1
const result3 = str.indexOf()
// 兩種方法都接受作為檢索起始位置的第二個(gè)參數(shù) 縮小搜查范圍
var str = "The full name of is the People's Republic of China."
const result0 = str.indexOf("China")) // 45
const result1 = str.indexOf("China", 11)) // 45
5. 有三種提取字符串的方法
- slice(start, end)
- substring(start, end) // 類似于 slice() 不同之處在于 substring() 無(wú)法接受負(fù)的索引芹啥。
- substr(start, length) // 類似于 slice() 不同之處在于第二個(gè)參數(shù)規(guī)定被提取部分的長(zhǎng)度陡蝇。 省略截取到最后
const str = '0123456789'
const result = str.slice(1, 4) // 123 // 注意包括 前 不包括后 [ )
cosnt result = str.slice(1, -1) // 12345678 // 負(fù)值從左數(shù) -1 不包含9
const result = str.slice(1); // 123456789 // 不寫 就接到最后了
const result = str.slice(-5); // 56789 // 簡(jiǎn)單記憶 截取后五位
6. split() 把字符串轉(zhuǎn)換為數(shù)組
const str = 'a,b,c,d,e,f'
const arr = str.split(',') // ['a', 'b', 'c', 'd', 'e', 'f']
// 反過來 用的是數(shù)組的 join(',')
7. replace() 方法不會(huì)改變調(diào)用他的字符串, 它返回一個(gè)新的字符串
- 默認(rèn)地, replace() 只替換首個(gè)匹配
const str = 'Please visit Microcoft and Microcoft!'
const n = str.replace('Microcoft', 'W3cScholl') // "Please visit W3School and Microsoft!"
- 默認(rèn)地让蕾,replace() 對(duì)大小寫敏感
const str = "Please visit Microsoft and Microsoft!"
const n = str.replace("microsoft", "W3School") // "Please visit Microsoft and Microsoft!"
- 如需替換所有匹配侣夷,請(qǐng)使用正則表達(dá)式的 g 標(biāo)志(用于全局搜索)
const str = "Please visit Microsoft and Microsoft!"
const n = str.replace(/Microsoft/g, "W3School") // "Please visit W3School and W3School!"
正則相關(guān)
字符串的方法
- match()
對(duì)字符串進(jìn)行正則匹配 返回匹配的結(jié)果
var str = 'hello world'
undefined
str.match(/l/)
=>> ["l", index: 2, input: "hello world", groups: undefined]
str.match(/l/g)
=>>["l", "l", "l"]
str.match(/a/g)
=>>null
- search()
返回第一個(gè)滿足條件的匹配結(jié)果在整個(gè)字符串中的位置 , 如果沒有任何匹配, 返回 -1
var str = 'hello world'
undefined
str.search(/l/)
=>> 2
str.search(/llo/)
=>> 2
str.match(/l/g)
=>>2
str.match(/a/)
=>>-1
- replace(regexp/substr,replacement)
可以替換匹配的值, 它接受兩個(gè)參數(shù),- 第一參數(shù)是正則表達(dá)式或字符串(表示搜索模式),
- 第二個(gè)是匹配的內(nèi)容 一個(gè)字符串值塞关。替換文本的函數(shù)(要有return)
- 在這種情況下晕讲,每個(gè)匹配都調(diào)用該函數(shù)贵白,它返回的字符串將作為替換文本使用抚芦。該函數(shù)的第一個(gè)參數(shù)是匹配模式的字符串倍谜。接下來的參數(shù)是與模式中的子表達(dá)式匹配的字符串,可以有 0 個(gè)或多個(gè)這樣的參數(shù)叉抡。接下來的參數(shù)是一個(gè)整數(shù)尔崔,聲明了匹配在 stringObject 中出現(xiàn)的位置。最后一個(gè)參數(shù)是 stringObject 本身褥民。
'2019.10.05'.replace(/\./g, '-')
=>> '2019-10-05'
let data = {
name: '小明',
message: '消息'
}
let str = "<p>{{name}}-{{message}}</p>"
let exp = /\{\{(.+?)(\})\}/g
let result = str.replace(exp, (a, $1, $2, index, strObj) => {
// 根據(jù) str 的特征 此回調(diào)調(diào)用兩次 注意 $1, $2 .... 和 正則的分組要一致
console.log(a) // {{name}} {{message}}
console.log($1) // name message
console.log($2) // } }
console.log(index) // 3 12
console.log(strObj) // "<p>{{name}}-{{message}}</p>" "<p>{{name}}-{{message}}</p>"
return data[$1] // 返回值就是要替換的
})
console.log(str) // <p>{{name}}-{{message}}</p>
console.log(result) // <p>小明-消息</p>
8. 大小寫轉(zhuǎn)換
- toUpperCase() 把字符串轉(zhuǎn)換為大寫
- toLowerCase() 把字符串轉(zhuǎn)換為小寫
const str = 'Hello World'
cosnt result = str.toUpperCase() // 'HELLO WORLD'
9. concat() 拼接一個(gè)或多個(gè)字符串
const str0 = 'Hello'
cosnt str1 = 'World'
const result = str0.concat(' ', str1) // 'Hello World'
10. trim() 截掉首尾的空白符
const str = " Hello World! ";
cosnt result = str.trim(); // Hello World!
// Internet Explorer 8 或更低版本不支持 trim() 方法
// 如需支持 IE 8季春,您可搭配正則表達(dá)式使用 replace() 方法代替:
// var str = " Hello World! ";
// alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
11. 通過下標(biāo) 提取字符串 charAt(position) charCodeAt(position)
var str = "HELLO WORLD";
str.charAt(0); // 返回 H
str.charCodeAt(0); // 返回 72 這是'H'的 unicode 編碼
// 最好還是使用 str[0] // 更加直觀
* 使用屬性訪問有點(diǎn)不太靠譜:
* 不適用 Internet Explorer 7 或更早的版本
* 它讓字符串看起來像是數(shù)組(其實(shí)并不是)
* 如果找不到字符,[ ] 返回 undefined消返,而 charAt() 返回空字符串载弄。
* 它是只讀的耘拇。str[0] = "A" 不會(huì)產(chǎn)生錯(cuò)誤(但也不會(huì)工作!) 賦值是無(wú)效的
12. 檢測(cè)以...開頭 以... 結(jié)尾 startWith() endWith() 返回 true false
var str = 'Hello world, welcome to the Runoob.';
var n = str.startsWith('Hello') // true
var n = str.endWith('jay') // false
13.padStart(length, tag), padEnd() 補(bǔ)位方法
- 默認(rèn)給原字符串開頭填充“ ”宇攻,也就是默認(rèn)填充空格
const str = '123'
undefined
str.padStart(10)
" 123"
- 字符串太長(zhǎng)惫叛,使填充后的字符串長(zhǎng)度超過了目標(biāo)長(zhǎng)度,則只保留最左側(cè)的部分逞刷,其他部分會(huì)被截?cái)唷?/li>
let monList = []
for (var i = 1; i < 13; i++) {
monList.push((i + "").padStart("2", "0"))
}
console.log(monList) // ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
- 自己實(shí)現(xiàn)
String.prototype.zpadStart = function (targetLength, padString) {
let string = this
while (string.length < targetLength) {
string = padString + string
}
return string
}
12. 字符串中加空格
const str = 'something' + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0' + 'something';