正则表达式主要用来检索替换文本,和表单验证、屏蔽敏感词等。
创建正则表达式两种方法
1 字面量创建 var reg = / js / ig ig为修饰符,i是忽略大小写 g是当前字符串的所有字符
2 new 构造函数创建 var reg = new Regexp()
字符串这样写 var reg = new RegExp('abc','ig');
常规字面量这样写 var reg = new RegExp(/abc/ig);或var reg = new RegExp(/abc/,‘ig‘)
字符串利用正则表达式检索方法
1. 字符串替换:字符串.replace(‘旧字符’/正则,‘新字符’/函数) / 为或者的意思
// var a = 'web123web456WEB789';
// var reg = /web/ig;
// console.log(a.replace(reg,'***'));
// 控制台输出***123***456***789
// 忽略大小写,全部web被更换为***
// replace返回值为替换后的新字符串
var a = 'web123web456WEB789';
var reg = /web/ig;
console.log(a.replace(reg,function (s) { 函数有形参,形参为符合正则条件的字符
console.log(s); 控制台输出三个web,s值为符合正则条件的字符
return '&&&' return的值就是替换内容的新字符
}));
// 控制台输出 &&&123&&&456&&&789
2.字符串分割:字符串.split(‘分隔符’/正则) / 为或者的意思 分割字符串返回新数组
var a = 'web123web456WEB789';
var reg = /web/i;
console.log(a.split(reg));
// 控制台输出(4) ["", "123", "456", "789"]
// 如果正则后边不加i 大写的web 不会被分割
// 所有被替换的web都要加逗号作为数组的项,所以是三个逗号四项
// split返回值被分割后的新数组,返回的是数组[]
3.字符串查找:字符串.search(正则) 查找符合正则的字符,找到返回下标,找不到返回-1
var a = 'web123web123WEB789';
var reg = /123/i;
console.log(a.search(reg));
// 控制台输出 3 123的起始下标为3,返回查找到的结果的第一项的下标
// 后边的i可写可不写 写了不会起作用,因为查找到第一个符合的项就会返回下标不在查找
// search返回值找到返回下标,找不到返回-1
4.字符串查找:字符串.match(正则) 查找符合正则的字符,找到返回符合条件的字符组成的数组
var a = 'web123web123WEB789';
var reg = /123/ig;
console.log(a.match(reg));
// 控制台输出 ["123", index: 3, input: "web123web123WEB789", groups: undefined]
// 如果正则不加g只查找符合的正则的第一项
// 返回的数组包括 符合正则的字符 字符所开始的下标 和原数组
// 如果加g 输出 (2) ["123", "123"]
// 返回的是符合正则的字符组成的新数组
// match返回值符合正则的字符组成的新数组
正则的方法
惰性查找: 一次只匹配一个 下一次再找下一个
exec: 返回匹配到的项 组成新数组返回
正则.exec(字符串);
不加g: 每次查找都从0开始
加g: 从上一次匹配到的结果的下一个字符开始查找
var a = 'web123web123WEB789';
var reg = /123/ig;
console.log(reg.exec(a));
console.log(reg.lastIndex); // 输出6 表示下次从下标为6的字符开始查找
// 控制台输出 ["123", index: 3, input: "web123web123WEB789", groups: undefined]
// 如果正则不加g每次查找都从0 开始 加g从上次查找到的结果的后边的字符开始查找
// 返回的数组包括 符合正则的字符 字符所开始的下标 和原数组
// 返回值符合正则的字符组成的数组 类似于match不加g
test
test: 返回是否有符合正则的字符 有返回true 没有返回false
正则.test(字符串);
不加g: 每次查找都从0开始 加g: 从上一次匹配到的结果的下一个字符开始查找
var a = 'web123web123WEB789';
var reg = /123/ig;
console.log(reg.test(a));
console.log(reg.lastIndex); // 输出6 表示下次从下标为6的字符开始查找
// 控制台输出 true 主要用来校验表单看用户输入的密码手否符合正则
// 如果正则不加g每次查找都从0 开始 加g从上次查找到的结果的后边的字符开始查找
// 返回tru 或 false
元字符
. 点 匹配除换行以外的任意字符;
字符集: 不需要加任何引号、分隔
[ ]: 字符集, 表示匹配字符集中的任意一个字符
[^]: 非字符集, 表示匹配除字符集以外的任意一个字符
0-9 0-9之间的每一个数字
a-z a-z之间的每一个字母
A-Z A-Z之间的每一个字母
\d: 数字0-9
\D: 除数字以外的任意字符
\w: 表示匹配字母、数字、_任何一个
\W: 表示匹配除字母\数字\_以外的任何一个
\s: 匹配空格
\S: 匹配除空格外的任何一个
\b: 单词边界 边界, 一个字母有2个边界
\B: 非单词边界
开头、结尾 整个字符串来做判断
一个字符串只有一个开头(第一个字符) 一个结尾(最后一个)
^a: 以a为开头
a$: 以a为结尾
量词
量词: 单位
a?
a? : 匹配是0个或者1个a
a*
a* : 匹配是0个或者 连续 的多个a 尽可能多的去匹配
a+
a+: 匹配 连续 的多个a 尽可能多的去匹配 至少匹配1位
a{m,n}
{m,n} : 匹配至少m次,最多n次 尽可能多的去匹配 m,n中间不能加空格
{m,} : 匹配至少m次 逗号不能省略
{m} : 匹配 m 次
或和
|或
a|b : 或 匹配a或者b
()和
() : 分组
每个分组的匹配结果都会在结果中展示, 数组第2项以后的就是分组的匹配结果
分组结果: $1 $2