正则表达式与字符串JS
字符串的方法
- 在底层字符串是以字符数组的形式保存的
length属性
可以用来获取字符串的长度
charAt()
可以返回字符串中指定位置的字符(根据索引获取指定位置的字符)
charCodeAt()
获取指定位置字符的字符编码(Unicode编码)
String.formCharCode()
可以根据字符编码去获取字符
concat()
可以用来连接两个或多个字符串(作用与 + 一样)
indexOf()
- 该方法可以检索一个字符串中是否含有指定内容
- 如果字符串中含有该内容,则会返回其第一次出现的索引
如果没有找到指定的内容,则返回 -1
- 可以指定一个第二参数,指定开始查找位置
lastIndexOf()
- 用法与indexOf()一样,也可以指定开始查找的位置
- 不同的是indexOf
是从前往后找,而lastIndexOf
是从后往前找
slice()
- 可以从字符串中截取指定的内容
- 不会影响原字符串,而是将截取到的内容返回
- 参数:
1. 开始位置的索引(包括开始位置)
2. 结束位置的索引(不包括结束位置)
如果省略第二个参数,则会截取到后边所有的
可以传递一个负数作为参数,负数将会从后边计算
substring()
- 可以用来截取一个字符串,与slice()
类似
- 参数:
1. 开始位置的索引(包括开始位置)
2. 结束位置的索引(不包括结束位置)
- 不同的是这个方法不能接受负值作为参数,如果传递了一个负值,则默认使用0
- 并且该方法会自动调整参数的位置,如果第二个参数小于第一个,则自动交换
substr()
- 用来截取字符串
- 参数:
1. 截取开始位置的索引
2. 截取的长度
split()
- 可以将一个字符串拆分为一个数组
- 参数:
需要将一个字符串作为参数,将会根据该字符串去拆分数组
如果传递一个空串作为参数,则会将每个字符都拆分为数组中的一个元素
toUpperCase()
- 将一个字符串转换为大写并返回
toLowerCase()
- 将一个字符串转换为小写并返回
var str = "hello atguigu"
var result = str.charAt(6);//等同 str[6];
result = str.charCodeAt(0);
console.log(result);//返回 h 的字符编码 72
result = String.fromCharCode(72);
console.log(result);//返回 h
result = str.concat("你好","再见");
console.log(result);//返回 "hello atguigu你好再见"
result = str.indexOf("a");
console.log(result);//返回6 指索引为6的位置为A
result = str.indexOf("l",3);
console.log(result);//返回3 指索引为3的位置第二个l
result = str.lastIndexOf("u");
console.log(result);//从后往前返回第一个u 指索引为12
result = str.lastIndexOf("u",10);
console.log(result);//从后往前返回第二个u 指索引为9
str = "abcdefghij";
result = str.slice(0,2);
console.log(result);//返回 "ab"
result = str.slice(1,-1);
console.log(result);//返回 "bcdefghi"
result = str.substring(1,-1);
console.log(result);//返回 "a"
str = "abc,def,ghi,jkl";
result = str.split(",");
console.log(Array.isArray(result));//返回 "true"
console.log(result[0]);//返回 "abc"
str = "abcdefg";
result = str.toUpperCase();
console.log(result);//返回 "ABCDEFG"
result = str.toLowerCase();
console.log(result);//返回 "abcdefg"
字符串和正则相关的方法
split()
- 可以将一个字符串拆分为一个数组
- 方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
- 这个方法即使不指定全局匹配,也会全都插分
search()
- 可以搜索字符串中是否含有指定内容
- 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回
-1
- 它可以接受一个正则表达式作为参数,然后根据正则表达式去检索字符串
search()
只会查找第一个,即使设置全局匹配也没用
match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
- 默认情况下我们的
match
只会找到第一个符合要求的内容,找到以后就停止检索
我们可以这只正则表达式为全局匹配模式,这样就会匹配到所有的内容- 可以为一个正则表达式设置多个匹配模式,顺序没有要求
match()
会将匹配到的内容封装到一个数组中返回,
replace()
- 可以将字符串中指定内容替换为新的内容
- 参数:
- 被替换的内容,可以接受一个正则表达式作为参数
- 新的内容
- 默认只会替换一个
var str = "1a2b3c4d5e6f7";
var result = str.split("c");
console.log(result.length);//2
console.log(result);// "1a2b3,4d5e6f7"
//根据任意字母来讲字符串拆分
result = str.split(/[A-z]/i);
console.log(result);// "1,2,3,4,5,6,7"
str = "hello abc hello aec afc"
result = str.search("abc");
console.log(result);//6
result = str.search("aec");
console.log(result);//16
result = str.search("abcd");
console.log(result);//-1
//搜索字符串中是否含有 abc 或 aec 或 afc
result = str.search(/a[bef]c/);
console.log(result);// 6 如果没有abc 找aec 返回12;
str = "1a2b3c4d5e6f7A8B9C";
result = str.match(/[A-z]/);
console.log(result);//a
result = str.match(/[A-z]/ig);
console.log(result);//"a,b,c,d,e,f,A,B,C"
console.log(Array.isArray(result));//true
console.log(result[1]);//b
str = "1a2a3a4d5e6f7A8B9C";
result = str.replace("a","@_@");
console.log(result);//a
result = str.replace(/a/ig,"@_@");
console.log(result);//"1@_@2@_@3@_@4d5e6f7@_@8B9C""
result = str.replace(/[A-z]/ig,"");
console.log(result);//"123456789"
正则表达式
- 正则表达式用于定义一些字符串的规则,
- 计算机可以根据正则表达式,来检查一个字符串是否符合规范,并获取将字符串中符合规则的内容提取出来
- 创建正则表达式的对象
1. 使用构造函数创建正则表达式
语法:
var 变量 = new RegExp("正则表达式","匹配模式")
使用typeof
检查正则对象,会返回object
var reg = new RegExp("a");
这个正则表达式可以来检查一个字符串是否含有a
- 在构造函数中可以传递一个匹配模式作为第二个参数
可以是
i
:忽略大小写
g
:全局匹配模式
注意:使用构造函数时,由于它的参数是一个字符串,而\
是字符串中转义字符
如果要使用\
则需要使用\\
来代替
2.使用字面量来创建正则表达式
语法:var 变量 = /正则表达式/匹配模式;
使用字面量的方式创建更加简单,但使用构造函数创建更加灵活
使用|
表示或者的意思
[]
里的内容也是或的关系
-[a-z]
任意小写字母
-[A-Z]
任意大写字母
-[A-z]
任意字母
-[0-9]
任意数字
[^ ]
除了 - 正则表达式的方法:
test()
- 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则
如果符合则返回true
,否则返回false
- 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则
// 使用构造函数创建正则表达式
var reg = new RegExp("a","i");
var str = "a";
console.log(reg.test(str));//返回 true
console.log(reg.test("bcbd"));//返回 false
console.log(reg.test("Abcbd"));//返回 true
//使用字面量来创建正则表达式
reg = /a/i;
console.log(typeof reg);//返回 "object"
console.log(reg.test("abc"));//返回 true
//创建一个正则表达式,检查一个字符串中是否有a或b
reg = /a|b/;
console.log(reg.test("cd"));//false
console.log(reg.test("acd"));//true
//创建一个正则表达式检查一个字符串中是否有字母
reg = /[A-z]/i;
console.log(reg.test("h"));//true
//检查一个字符串中是否含有 abc 或 adc 或 aec
reg = /a[bde]c/;
console.log(reg.test("aeec"))//false
reg = /[^0-9]/;
console.log(reg.test("123456"));//false
console.log(reg.test("123a456"));//true
正则表达式的语法
量词
- 通过量词可以设置一个内容出现的次数
- 量词只对它前边的一个内容起作用
{n}
正好连续出现n次
{m,n}
出现m~n
次
{m,}
m次以上
+
至少一个,相当于{1,}
*
0个或多个,相当于{0,}
?
0个或1个,相当于{0,1}
^
表示开头
$
表示结尾
- 如果在正则表达式中同时使用^ $
,则要求字符串必须完全符合正则表达式
.
表示任意字符
- 在正则表达式中使用\
作为转义字符
\.
来表示单纯的.
\\
表示
\w
任意字母、数字、_ [A-z0-9_]
\W
除了字母、数字、_ [^A-z0-9_]
\d
任意的数字[0-9]
\D
除了数字[0-9]
\s
空格
\S
除了空格
\b
匹配单词边界
\B
匹配非单词边界
//创建一个正则表达式检查一个字符串中是否含有连续多个a
var reg = /a{5}/;
console.log(reg.test("aaaaabc"));//true
reg = /ab{3]/;
console.log(reg.test("ababab"));//false
console.log(reg.test("abbb"));//true
reg = /(ab){3}/;
console.log(reg.test("ababab"));//true
// 检查一个字符串中是否以a开头
reg = /^a/;// 匹配开头的a
reg = /a$/;// 匹配结尾的a
reg = /^a$/;//必须只能是a
reg = /\\/;
console.log("b.\\");//返回 b.\
console.log(reg.test("b.\\"));//true
//创建一个正则表达式检查一个字符串中是否含有单词child
reg = /\bchild\b/;
console.log(reg.test("hello children"));//false
console.log(reg.test("hello child"));//true
// 去除掉字符串中的空格
// 去除空格就是使用 "" 来替换空格
var str = " hello ";
console.log(str);// " hello "
str = str.replace(/\s/,"");
console.log(str);// " hello "
str = str.replace(/\s/g,"");
console.log(str);// "hello" // 会替换所有的空格
str = " he llo "
// 去除开头的空格
str = str.replace(/^\s*/,"");
// 去除结尾的空格
str = str.replace(/\s*$/,"");
// 去除前后的空格
str = str.replace(/^\s*|\s*$/g,"");
console.log(str);// "he llo"