正则表达式在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 检查一个字符串是否含有a
    • a|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}$/;
posted @ 2023-08-03 20:48  FL不凡  阅读(14)  评论(0编辑  收藏  举报