[toc]
> 字符串 API:[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global\_Objects/String](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String)
# 題1、如何判斷一個字符串中是否包含某一個字符?
答:
方法一、indexOf,返回值是字符在字符串中的位置(數字),如果在第1個位置返回0,如果沒有返回 -1
方法二、includes(ES6),返回值是布爾類型
方法三、正則表達式,比如:判斷是否有 x :'abc'.match(/x/)
# 題2、如何截取字符串中第3~5個字符?
答:比如:'abcdefg' --> 截取3~5的結果:cde。
方法一、substring , 'abcdefg'.substring(2,5)
方法二、substr , 'abcdefg'.substr(2,3)
區別:第二個參數含義不同,一個是結束的下標(substring),一個是截取的長度(substr)
# 題3、如何獲取一個字符串的長度?
答:length 屬性。比如:'abcde'.length
# 題4、如何把字符串中的字母轉成大寫?轉成小寫呢?
答: toUpperCase :轉大寫
toLowerCase:轉小寫
~~~
'abc'.toUpperCase()
'BCA'.toLowerCase()
~~~
# 題5、JS 中如何將單詞的首字母大寫?
答:JS 中沒有自帶首字母轉大寫的功能,我們可以自己實現一個:
1. 先為字符串原型添加一個方法,在 String 原型上添加(String.prototype)的函數,可以在所有字符串上直接使用。
~~~
String.prototype.firstUpperCase = function(){
// 通過正則表達式,匹配第一個字符,和后面的字符
return this.replace(/\b(\w)(\w*)/g, function($0, $1, $2) {
// 將第一個字符轉大寫 + 后面的字符轉小轉
return $1.toUpperCase() + $2.toLowerCase();
});
}
~~~
2. 添加完之后,所以的字符串就可以直接使用 firstUpperCase 方法了
~~~
'abcdefg'.firstUpperCase()
~~~

# 題6、如何把字符串中所有的數字轉成 * ?
答:比如:'ab32abd4r43af' ==> 'ab**abd*r**af'
實現思路:使用正則表達式 + replace 方法
~~~
function replaceXX(str) {
// 替換:第一個參數:正則表達式
// \\d:數字
// /g:全局替換,如果不加只會替換第一個數字
return str.replace(/\d/g, '*')
}
~~~
# 題7、如何將字符串轉成數組?
答:使用 split 。
比如:
~~~
'abc,bcd,des,cda'.split(',') ==> ['abc','bcd','des','cda']
~~~
# 題8、如何將數組轉成字符串?
答:
方法一、join ,優點:可以任意指定分隔符。
比如:
~~~
['abc','bcd','des','cda'].join('-') ===> 'abc-bcd-des-cda'
~~~
方法二、toString,默認是以 ,分隔
# 題9、如何合并兩個字符串?
答:
方法一、使用 + 'abc'+'bcd' ==> abcbcd
方法二、使用 concat 'abc'.concat('bcd') ==> abcbcd
# 題10、請說出至少 10 個操作字符串的方法?
答:split:轉數組
join:轉字符串
toString:轉字符串
concat:連接
substring:從開始到結束下標截取
substr:從開始截取一定長度的字符串
indexOf:查看一個字符串中某一個子字符串的位置
replace :字符串替換,替換時也可以使用正則來匹配
match:用字符串去匹配一個正則
toUpperCase:轉大寫
toLowerCase:轉小寫

# 題11、如何把一個字符串中所有的手機號碼中的中間4位數字變成 ****?
答:'ab13455334444sd' ==> 'ab134****4444d'
實現思路:使用正則表達式 + replace 方法
~~~
function replaceXX(str) {
// 替換:第一個參數:正則表達式
// $1:正則中第 1 個括號中的內容(反向引用)
// $2:正則中第 2 個括號中的內容(反向引用)
// $3:正則中第 3 個括號中的內容(反向引用)
return str.replace(/(1\d{2})(\d{4})(\d{4})/g, '$1****$3')
}
let a = 'abdf13344445555das'
console.log(replaceXX(a))
~~~
方法二、
~~~
let a = '13344445555'
console.log( a.substr(0,3) + '****' + a.substr(-4) ) // 133****5555
~~~
# 題12、轉成駝峰命名法?
比如:"get-element-by-id" ==》 getElementById
思路:先轉數組,循環數組處理每個單詞首字母大寫,轉回字符串。
~~~
String.prototype.firstUpperCase = function(){
// 通過正則表達式,匹配第一個字符,和后面的字符
return this.replace(/\b(\w)(\w*)/g, function($0, $1, $2) {
// 將第一個字符轉大寫 + 后面的字符轉小轉
return $1.toUpperCase() + $2.toLowerCase();
});
}
let str = "get-element-by-id"
str = str.split("-").map((v,k)=>{
if(k>0) {
return v.firstUpperCase()
} else {
return v
}
}).join()
~~~