[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()
~~~
![](https://img.kancloud.cn/25/ec/25ece47825ed83ee61385c18f20b7337_1430x732.png)
# 题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:转小写
![](https://img.kancloud.cn/84/8d/848de95a093e39661d693d4ae000cec4_1380x1506.png)
# 题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()
~~~