正则表达式在JavaScript的使用
正则表达式
- 引入:邮件格式的匹配
介绍
- 检查字符串是否符合某些规则
使用规则
- 基本语法:
- 构造函数方式:
let 变量 = new RegExp("正则表达式","匹配模式")
(更灵活) - 字面量方式:
let 变量 = /正则表达式/匹配模式
(更方便)
- 构造函数方式:
- 匹配模式(可以有多个,且顺序无所谓):
- i 忽略大小写
- g 全局匹配模式
//检查一个字符串是否含有a,区分大小写
let reg = new RegExp("a","i");
reg = /a/i;
let str = "134u8132a";
//test()方法可以检查一个字符串是否符合正则表达式的规则
let res = reg.test(str);
console.log(res);//true
常用正则表达式
- 常用正则表达式
a
检查一个字符串是否含有aa|b
或[ab]
检查一个字符串是否含有a或b,其中|
和[]
均可表示"或"[a-z]
检查一个字符串是否含有任意小写字母,其中-
表示"到"[A-z]
检查一个字符串是否含有任意字母,也可用/[a-z]/i/
[0-9]
检查一个字符串是否含有任意数字a[abc]c
检查一个字符串是否含有以a开头,c结尾,中间为b/c/d的块[^ab]
检查一个字符串是否含有除ab外的字符,其中[^]
表示"除了"
//检查一个字符串是否含有a,区分大小写
let reg = new RegExp("a","i");
let str = "134u8132a,";
// 检查一个字符串是否含有a或b
let reg2 = /a|b/;
console.log(reg2.test(str));//true
// 检查一个字符串是否含有任意小写字母
let reg3 = /[a-z]/;
console.log(reg3.test(str));//true
// 检查一个字符串是否含有任意字母
let reg4 = /[a-z]/i;
console.log(reg4.test(str));//true
let reg5 = /[A-z]/;
console.log(reg5.test(str));//true
//检查一个字符串是否以a开头,c结尾,中间为b/c/d
str = "babc";
let reg6 = /a[abc]c/;
console.log(reg6.test(str));//true
字符串和正则相关方法
- split()
- 可以将字符串拆分为数组
- 方法中可以传递正则表达式作为参数
- 默认全部拆分
let str = "1k2h3n4b53bd4";
//根据字符串拆分
let result = str.split(/[A-z]/);
console.log(result);
- search()
- 可以搜索字符串是否含有指定内容,如果有,返回第一次出现的索引,没有则返回-1
- 可以传递正则表达式作为参数
- 只会查找第一个,设置全局匹配无效
str = "aezdaec";
result = str.search(/a[aef]c/);
console.log(result);
- match()
- 可以根据正则表达式,将字符串中符合的内容提取,会将匹配到的结果封装到数组
- 默认情况下,该函数找到一个符合条件的结果就会停止
- 可以将正则表达式的匹配模式修改为全局匹配,就可以匹配所有符合的结果
//提取所有符合的结果,忽略大小写
str = "ae3z45da1ec;ff";
result = str.match(/[a-z]/gi);
console.log(result);
- replace()
- 可以根据正则表达式,将字符串中符合的内容替换
- 需要两个参数,第一个参数被替换的内容,第二个参数新的内容,第二个参数可以是空串
- 默认只会替换第一个,要替换所有需要修改正则表达式的匹配模式为全局匹配
str = "11244323ae3z4c;ff";
result = str.replace(/[a-z]/gi,"@");
console.log(result);
语法
- 量词
- 可以通过量词设置一个内容出现的次数
(a){n}
表示a正好出现n次(a){x,y}
表示a出现x至y次(a){x,}
表示a出现至少出现x次a+
表示a出现至少一个a*
表示a出现零个或多个a?
表示a出现零个或一个^a
表示以a开头a$
表示以a结尾.
表示单个任意字符
//ab正好连续出现5次
let str = "abababaa";
let reg = /(ab){5}/;
console.log(reg.test(str));
//匹配abbbc
str = "abbbc";
reg = /a(b){3}c/;
console.log(reg.test(str));
//匹配abc,其中b连续出现1-3次
reg = /a(b){1,3}c/;
console.log(reg.test(str));
//匹配abc,其中b至少连续出现3次
reg = /a(b){3,}c/;
console.log(reg.test(str));
// a出现至少一个
reg = /a+/;
console.log(reg.test(str));
// a出现零个或多个
reg = /a*/;
console.log(reg.test(str));
// a出现零个或一个
reg = /a?/;
console.log(reg.test(str));
//以a开头
reg = /^a/;
console.log(reg.test(str));
//以a结尾
reg = /a$/;
console.log(reg.test(str));
- 转义字符
- 在正则表达式中使用
\
\.
表示".",其他字符类似\w
表示任意字母、数字、下划线__\W
表示除了任意字母、数字、下划线__\d
表示任意数字\D
表示除了任意数字\s
表示空格\S
表示除了空格\b
表示单词边界
,例如\bchild\b
表示是否含有单独的"child"这个单词\B
表示除了单词边界
- 在正则表达式中使用
常用正则表达式
见该博客:常用正则表达式合集,这一篇就够了!!(含完整案例,建议收藏)_冰 河的博客-CSDN博客
练习
1 检查手机号
- 要求:
- 检查一个字符串是否为合法的手机号
- 第一位是1
- 第二位3-9
- 三位后任意9个数字
2 去除空格
- 要求
- 接收用户输入,去除用户输入中首尾的所有的空格
- 答案
//接收用户输入
let str = prompt("请输入用户名:");
//去除字符串中的前后的空格
// str = str.replace(/\s/g,"");
//去除开头空格
str = str.replace(/^\s*/,"");
console.log(str);
//去除结尾空格
str = str.replace(/\s*$/,"");
console.log(str);
//去除开头或结尾的空格
str = str.replace(/^\s* | \s*$/g,"");
console.log(str);
匹配电子邮箱
- 要求
- 任意字母数字下划线@任意字母数字.任意字母(2-5位).任意字母(2-5位)
- 答案
let emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;