1、字符串的使用方法
- 在底层,字符串都是以字符数组的形式保存的
- ["h","e","l","l","o"]
- length 获取字符串的长度
- charAt()
- 可以返回字符串指定位置的字符
- 根据索引获取指定位置的字符
- 不会影响原字符串
- charCodeAt() :返回在指定的位置的字符的 Unicode 编码。
- String.fromCharCode() :可以根据字符编码去获取字符
- concat() :连接两个或多个字符串
- indexOf()
- 从前往后检索字符串是否有指定内容。
- 如果字符串含有该内容,则会返回其第一次出现位置的索引值
- 如果没有找到,则返回-1
- 可以指定第二个参数,来指定开始查找的位置
- lastIndexOf()
- 从后向前检索字符串是否有指定内容。
- 可以指定第二个参数,来指定开始查找的位置(这里是从前往后的位置正数,不是倒数)
- slice()
- 可以从字符串中截取指定的内容
- 不会影响原字符串,而是将截取的内容作为返回值返回
- 参数:
- 1、开始位置的索引,包含
- 2、结束位置的索引,不包含
- 如果省略第二参数,则会截取后面所有
- 也可以传递一个负数,从后面截取
- substring()
- 可以截取一个字符串
- 参数:
- 1、开始位置的索引,包含
- 2、结束位置的索引,不包含
- 但是他不接收负数作为参数,如果传递了一个负值,则默认使用0
- 而且他还会自动调整参数的位置
- 如果第二个参数小于第一个参数,则自动交换
- substr()
- 截取字符串,从起始索引号提取字符串中指定数目的字符。
- 参数:
- 1、开始位置的索引,包含
- 2、第二个参数是截取的长度
- split()
- 把字符串分割为字符串数组。
- 参数:
- 需要一个字符串作为参数,将会根据该字符串去拆分数组
- 如果传递空串,则将每个字符拆分为数组中的一个元素
- toUpperCase() :把字符串转换为大写。
- toLowerCase() :把字符串转换为小写。
var str = "hello";
console.log(str[3]);
console.log(str.length);
var result = str.charAt(2);
result = String.fromCharCode(0x2849);//表示16进制要以0x开头
result = str.concat("dsfa","asdfasd");//hellodsfaasdfasd
result = str.indexOf("h",3);
console.log(result);
str = "hellodsfasdfsdfertter";
result=str.split("d");
result=str.split(""); //"h", "e", "l", "l", "o", "d", "s", "f", "a", "s", …
console.log(result); //"hello,", "sfa,s", "fs", "f,ertter"
//把d变成逗号了
2、正则表达式
- 正则表达式:
- 使用字面量来创建正则表达式:
- 创建一个正则表达式,检查字符串里面是否有a或b
- 量词:
- 转义字符:
- 在正则表达式中使用\来作为转义字符
- . 点表示任意字符
- 注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中的转义字符
- 所以如果使用\,则需要\\来代替
- \w :任意字母数字
- \W :除了字母数字
- \d :任意数字
- \D :除了数字
- \s :空格
- \S :除了空格
- \b :单词边界(\bchild\b,表示child是一个独立的单词)
- \B :除了单词边界
-
var reg = /\./;
document.write(reg.test("sdafasdfa"));
reg = /\bchild\b/;
console.log(reg.test("hellochildren"));
//接收一个用户输入
var str =" hello ";
//去除字符串前后的空格,使用“”来替换空格,去空格都是去前后保留中间的
str = str.replace(/\s/g,"");
//去除开头的空格
str = str.replace(/^\s*/g,"");
//去除结尾的
str = str.replace(/\s*$/g,"");
str = str.replace(/^\s*|\s*$/g,"");
console.log(str);
3、字符串和正则表达式相关的方法
- split
- 把字符串分割为字符串数组。
- 可以产地一个正则表达式拆分
- 这个方法即使不指定全局匹配,也会默认全局匹配
- search
- 可以搜索字符串中是否含有指定的内容
- 他如果搜索到指定内容,则会返回第一次出现的索引,如果没有检索到则返回-1
- 可以接收一个正则表达式的内容,然后根据正则表达式去检索字符串
- 只会查找第一个,即使设置全局匹配也没用
- match
- 可以接收一个正则表达式的内容,然后从一个字符串中将符合条件的内容提取出来
- 默认情况,我们的match只会找到第一个符合要求的内容,找到以后就停止检索
- 我们可以通过正则表达式为全局匹配模式,这样就会匹配到所有内容
- 它会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
- replace
- 可以将字符串中指定的内容替换为新的内容
- 参数:
- 默认只会替换第一个
//split
var str = "1a2b3c4d5e6f7";
//希望可以根据任意字母拆分
var result = str.split(/[A-z]/);
console.log(result);
//search
str = "1a2,1324,152,6f7";
result = str.search(/1[adf3]2/);//索引0
console.log(result);
//match
str = "1a2b3gdfgc4d5e6f7dfgadfg44jkrq";
result = str.match(/[A-z]/gi);
console.log(result);
console.log(Array.isArray(result));
//replace
result = str.replace(/a/gi,"@@@");
console.log(result);
正则表达式的小练习
<script type="text/javascript">
/*
练习一:创建正则表达式,用来检查一个字符串是否是一个合法的手机号
手机号的规则:1 3 453454268(11位)
1、以1开头
2、第二位3~9任意数字
3、三位以后任意数字9个
^1 [3-9] [0-9]{9}$
*/
var phoneStr = "13567853467";
var phoneReg = /^1[3-9][0-9]{9}$/;
document.write(phoneReg.test(phoneStr)+"<br/>");
/*
练习二:电子邮件
sdfsad@sdfa.com.cn
规则:
任意字母数字下划线 .任意字母数字下划线 @ 任意字母数字 .任意字母(2~5位) .任意字母(2~5位) (可选)
\w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
*/
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "sdfsad@efd.com.123";
document.write(emailReg.test(email));
</script>