正则表达式学习

2022.04.23

正则表达式用于定义一些字符串的规则。

使用构造函数创建正则表达式

通过RegExp()构造函数创建正则表达式的对象:

var reg = new RegExp("正则表达式", "匹配模式");
  • 两个参数均为字符串类型,匹配模式可省略

  • 正则表达式为要匹配的字符串中需包含的关键字

  • 匹配模式有i忽略大小写,g全局匹配

调用test()方法检查字符串,返回一个布尔值:

var result = reg.test(str);

使用字面量创建正则表达式

通过字面量//创建正则表达式的对象

var reg = /正则表达式/匹配模式;

调用test()方法检查字符串:

var result = reg.test(str);

正则表达式语法

  • /ab/表示是否包含 ab

  • /a|b/表示是否包含 a或b

  • /[a-z]/表示是否包含 任意小写字母

    /[A-Z]/表示是否包含 任意大写字母

    /[A-z]/表示是否包含 任意字母

    /[0-9]/表示是否包含 任意数字

  • /[^ab]/表示是否包含 除了ab以外的任意字符

  • /a{n}/表示是否包含 n次的a

    /(abc){n}/表示是否包含 n次的abc

    /a{m,n}/表示是否包含 m-n次的a

    /a{m,}/表示是否包含 m次以上的a

  • /a+/表示是否包含 至少一个的a,相当于有a即可

    /a*/表示是否包含 0个及以上的a,相当于有无a均可

    /a?/表示是否包含 0个或1个的a

  • /^a/表示是否 以a开头

    /a$/表示是否 以a结尾

    /^ab$/表示是否 完全符合字符串ab

  • /\/ 转义字符相关

  • /\w/ /\W/ /\d/ /\D/ /\s/ /\S/ /\b/ /\B/特殊字符相关

  • ……剩下仍有许多语法,应当去MDN查文档

练习

检测字符串是否为一个合法的国内手机号:

var phoneStr = "13123456789";
// 国内手机号应 开头为1,第二位为3-9,后面9位为0-9,共11位数字
var phoneReg = /^1[3-9][0-9]{9}$/;
var result = phoneReg.test(phoneStr);

检测字符串是否为一个合法的电子邮箱地址:

var email = "hello123.world@gmai.com.cn";
// 电子邮箱地址应为 开头任意3位以上字母数字下划线 可选.任意字母数字下划线 @ 任意字母数字 .任意2-5位字母 可选.任意2-5位字母
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var result = emailReg.test(email);

支持正则的字符串方法

  • split()将字符串拆分为一个数组

    通过正则表达式实现 根据任意字母将字符串拆分:

    var result = str.split(/[A-z]/);
    
  • search()搜索字符串中是否含有指定内容

    通过正则表达式实现 搜索多个指定内容:

    var result = str.search(/a[bde]c/);
    
  • match()从字符串中将符合条件的内容提取出来,返回一个数组

    通过正则表达式实现 提取多个符合条件的内容,需要添加匹配模式g全局匹配:

    var result = str.match(/[a-z]/g);
    
  • replace()将字符串中的指定内容替换成新的内容

    通过正则表达式实现 替换多个指定内容,需要添加匹配模式g全局匹配:

    var result = str.replace(/[a-z]/g, "@")