[TOC]
# 题1、如何判断一个字符中是否包含某一个字符?
答:
方法一、 indexOf,返回值是字符在字符串的位置(数字),如果在第1个位置返回0,如果没有返回-1
方法二、includes(ES6),返回值是布尔类型
方法三、正则表达式,比如:判断是否有x : 'abc'.match(/x/)
方法四、search,用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的字符串,则返回 -1
~~~
// 判断一个字符串中是否包含某一个字符的方法
// 方法一、 indexOf() 返回值是字符在字符串中位置的下标,如果在第5个位置返回4,如果没有返回 -1
console.log(a.indexOf('o')); // 4
// 方法二、 includes()(ES6),返回值是布尔类型
console.log(a.includes('o')) // true
// 方法三、 正则表达式,match()方法
console.log(a.match(/o/)); // [ 'o', index: 4, input: 'helloworld', groups: undefined ]
// 方法四、 search() 方法,用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的字符串,则返回 -1
console.log(a.search('o')); // 4
console.log(a.search(/o/)); // 4
~~~
# 题2、如何截取字符串中3~5个字符?
答:比如: 'helloworld' --> 截取3~5的结果:llo。
方法一、 substring, 'helloworld'.substring(2,5)
方法二、substr, 'helloworld'.substr(2,3)
区别: 第二个参数不同,一个是结束的下标(substring),一个是截取的长度(substr)
~~~
// 截取字符串中第3~5个字符
var b = 'helloworld'
// 方法一、 substring
console.log(b.substring(2, 5));
// 方法二、 substr
console.log(b.substr(2, 3));
~~~
# 题3、如何获取一个字符串的长度?
答: length 属性。比如,'helloworld'.length
# 题4、如果把字符串中的字母转成大写?转成小写呢?
答:
toUpperCase : 转大写
toLowerCase : 转小写
~~~
'abc'.toUpperCase() // ABC
'BCA'.toLowerCase() // bca
~~~
# 题5、 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 方法了
~~~
'hello'.firstUpperCase() // Hello
~~~
# 题6、如何把字符串中所有的数字转成 \* ?
答: 比如, 'a123b456c789' --> `a***b***c***`
实现思路: 使用这种表达式 + replace 方法
~~~
// 把字符串中所有的数字转成 *
function replaceXX(str) {
// 替换: 第一个参数:正则表达式
// \\d: 数字
// /g: 全局替换,如果不加只会替换第一个数字
return str.replace(/\d/g,'*')
}
console.log(replaceXX('a123b456c789')); // a***b***c***
~~~
# 题7、如何将字符串转成数组?
答: 使用 split 。
比如:
~~~
console.log('hi, nice, to, meet, you'.split(',')); // [ 'hi', ' nice', ' to', ' meet', ' you' ]
~~~
# 题8、如何将数组转成字符串?
答:
方法一、 join , 优点:可以任意指定分隔符。
方法二、 toString , 默认是以 , 分隔
~~~
// 将数组转成字符串
let arr = [ 'hi', ' nice', ' to', ' meet', ' you' ];
console.log(arr.join('')); // hi nice to meet you
console.log(arr.toString()); // hi, nice, to, meet, you
~~~
# 题9、如何合并两个字符串?
答:
方法一、 使用 + ,比如: 'abc'+'bcd' ==> abcbcd
方法二、使用 concat方法,比如: 'abc'.concat('bcd') ==> abcbcd
~~~
// 合并两个字符串
// 方法一、 +
console.log('abc' + 'bcd'); // abcbcd
// 方法二、 concat
let str = 'abc'.concat('bcd')
console.log(str); // abcbcd
~~~
# 题10、请说出至少 10 个操作字符串的方法?
答:
split: 字符串转数组
join: 数组转字符串
toString: 数组转字符串
concat: 合并多个字符串
substring: 从开始到结束下标截取
substr: 从开始截取一定长度的字符串
indexOf: 查看一个字符串中某一个字符串的位置
replace: 字符串替换,可以使用正则来匹配替换
match: 用字符串去匹配一个正则
toUpperCase: 字母转大写
toLowerCase: 字母转小写
![](http://ww1.sinaimg.cn/large/007WurYGgy1gf4qwru6o8j312c15u7wh.jpg)
# 题11、 如何把一个字符串中所有的手机号码中的中间4位数字变成 `****` ?
答:'ab13455334444sd' ==> 'ab1344444d'
实现思路: 使用正则表达式 + replace 方法
~~~
// 把一个字符串中所有的手机号码中的中间4位数字变成 ****
function replaceXX(str) {
return str.replace(/(1\d{2})(\d{4})(\d{4})/g, '$1****$3')
}
let rstr = 'abdf13344445555das'
console.log(replaceXX(rstr)) // abdf133****5555das
~~~
# 题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 hump = 'get-element-by-id'
hump = hump.split('-').map((v, k) => {
if (k > 0) {
return v.firstUpperCase()
} else {
return v
}
}).join('')
console.log(hump); // getElementById
~~~