目录
基础
作用:计算机可根据正则表达式来检查一个字符串是否符合规则,并将字符串中符合规则的内容提取出来
语法:
-
使用构造函数创建
let 变量 = new RegExp("正则表达式" , "匹配模式"); // 匹配模式可以是 i (忽略大小写),g (全局匹配模式)
-
使用字面量创建
let 变量 = / "正则表达式" / "匹配模式";
检查方法
格式:test();
let res = new RegExp("a");
let res1 = new RegExp("A","i");
console.log(res.test("abc")); // 检测"abc"中是否有a, (true)
console.log(res1.test("abc")); // 检测"abc"中是否有A且忽略大小写 (true)
实例:
-
创建一个正则表达式,检查一个字符串中是否有a或b
let res = / a | b /; // 使用 | 表示或的意思
let res = / [ab] /; // [ab] == a | b
-
创建一个正则表达式,检查一个字符串中是否有字母
let res = / A - z /;
-
创建一个正则表达式,检查一个字符串中是否有 abc 或 adc 或 aec
let res = / a [bde] c /;
-
创建一个正则表达式,检查一个字符串中是否有除了ab以外的字符
let res = / [ ^ab ] /;
其他方法
-
search()
作用:可以搜索字符串中是否含有指定内容,如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到则返回-1;它可以接收一个正则表达式,然后会根据正则表达式去检索字符串
注意点:search()只会查找第一个,即使设置全局匹配也没用
例:搜索字符串中是否有 abc 或 adc 或 aec
let res = "hello abc aec adc";
console.log(res.search(/ a [bde] c /)); // 6 ( abc中a的索引为6)
-
match()
作用:根据正则表达式,从一个字符串中将符合条件的内容提取出来
注意点:①默认情况下match()只会找到第一个符合要求的内容,找到后就停止检索
②可以设置正则表达式为全局匹配模式,这样就会找到全部符合要求的内容
③match()会将匹配到的内容封装到一个数组中返回,即使只查到一个结果
例:let str = "1a2b3c4d5E6F7G";
console.log(str.match(/ [a - z] / ig)); // abcDEFG
console.log(str.match(/ [A - z] / g)); // abcDEFG
-
replace()
作用:可以将字符串中指定内容替换为新的内容
参数:1. 被替换的内容 2. 新的内容
注意点:默认只会替换一个
例:let res = "123abcABC";
conlose.log(res.replace(/ a-z / ig,"&")); // 将res中的小写字母替换为&
conlose.log(res.replace(/ A-z / ig,"")); // 将res中的字母删除(参数2引号内什么都不写)
-
split()
作用:将一个字符串拆分为一个数组,方法中可以传递一个正则表达式,这样方法会根据正则表达式去拆分字符串
注意点:split()即使不指定全局匹配,也会全部拆分
例:let res = "1a2b3c4d5E6F7D";
console.log(res.split(/ A - z /)); // 根据任意字母将字符串拆分为一个数组
量词
作用:通过量词可以设置一个内容出现的次数
注意点:量词只对它前边的一个内容起作用
-
{n} 正好出现n次
let res = / a{6} /; // 查找a正好出现6次的字符串
-
{m,n} 出现m到n次
-
{m, } 出现m次以上
-
a+ a至少出现1次,相当于{1, }
-
a* a出现0次或多次,相当于{0, }
-
a? a出现0次或1次,相当于{0,1}
-
^a 检查字符串是否以a开头
let res = / ^a /; // 此处的^与 [ ] 中的^作用不同,[ ] 中的^是查找不含某个字符的内容
-
a$ 检查字符串是否以a结尾
let res = / a$ /;
-
^和$同时使用则为查找只有一个a,且a是开头又是结尾
let res = / ^a$ /;
转义字符
格式:\
注意点:使用构造函数时,由于参数是一个字符串,所以要想用转义字符,则其格式为:\\
例:
-
检查一个字符串中是否有点 .
let res = / \ . /;
let res = new RegExp(" \ \ . ");
-
检查一个字符串中是否有 \
let res = / \ \ /;
let res = new RegExp(" \ \ \ ");
其他:
-
\w 任意字母、数字、下划线_,相当于[A-z 0-9 _ ]
-
\W 除了字母、数字、下划线_,相当于[ ^ A-z 0-9 _ ]
-
\d 任意数字,相当于[0-9]
-
\D 除了数字,相当于[ ^ 0-9 ]
-
\s 空格
例:
接受一个用户输入的用户名,且删除前后的空格,中间的空格不删除
let str = prompt("请输入你的用户名:"); // 此时输入: hello world (前中后都有空格)
str = str.replace(/^\s*/,""); // 去除开头的空格
str = str.replace(/\s*$/,""); // 去除结尾的空格
str = str.replace(/^\s* | \s*$/g,""); // 去除开头和结尾的空格
注意点:去掉空格就是使用""来替换空格
-
\S 除了空格
-
\b 单词边界
例:
-
创建一个正则表达式,检查一个字符串中是否有含有单词child
let res = /\bchild\b/;
console.log(res.test("hello children")); // false
-
创建一个正则表达式,检查一个字符串中是否有含有child
let res = /child/;
console.log(res.test("hello children")); // true
-
-
\B 除了单词边界
邮件的正则
格式:
hello .nihao @ abc .com .cn
任意字母数字下划线 .任意字母数字下划线 @ 任意字母数字 .任意字母(2-5位) .任意字母(2-5位)
\w{3,} ( \ . \w+)* @ [A-z0-9]+ (\ . [A-z]{2-5}){1,2}
例:
let emailReg = /^\w{3,}( \ . \w+)*@[A-z0-9]+(\ . [A-z]{2-5}){1,2}$/; // 前后分别加上 ^ 和 $,表示一个完整的邮件
let email = "abc@abc.com.cn"; // true
let eamil1 = "abc@abc.com.123"; // false,若前后不加^ 和 $,则为true,即只要检测到邮件就返回true