目录一、正则字符1.描述字符2.元字符二、使用步骤1.引入库2.读入数据总结前言个人整理提炼欢迎指正 (目标是一篇博客带读者彻底搞明白正则表达式) uO(∩_∩)Ou正则表达式教程——语法篇JS正则表达式语法大全非常详细一、正则字符1.描述字符 (简单字符)根据正则表达式语法规则大部分字符仅能够描述自身这些字符被称为普通字符如所有的字母、数字等。2.元字符转义字符元字符就是拥有特定功能的特殊字符大部分需要加反斜杠进行标识以便于普通字符进行区别而少数元字符需要加反斜杠以便转译为普通字符使用。JavaScript 正则表达式支持的元字符如表所示。元字符描述.查找单个字符除了换行和行结束符\w查找单词字符\W查找非单词字符\d查找数字\D查找非数字字符\s查找空白字符\S查找非空白字符\b匹配单词边界\B匹配非单词边界\0查找 NUL字符\n查找换行符\f查找换页符\r查找回车符\t查找制表符\v查找垂直制表符\xxx查找以八进制数 xxxx 规定的字符\xdd查找以十六进制数 dd 规定的字符\uxxxx查找以十六进制 xxxx规定的 Unicode 字符3.创建正则表达式//字面量方式其由包含在斜杠之间的模式组成如下所示 const rule /abc/; //构造函数方式调用RegExp对象的构造函数如下所示 const rule new RegExp(abc);二、一般正则规则1.描述字符范围多字符匹配在正则表达式语法中方括号表示字符范围。在方括号中可以包含多个字符表示匹配其中任意一个字符。例[abc]查找方括号内任意一个字符。例[abc1234]查找方括号内任意一个字符。连续字符匹配如果多个字符的编码顺序是连续的可以仅指定开头和结尾字符省略中间字符仅使用连字符-表示。例[0-9]查找从 0 至 9 范围内的数字即查找数字。例[a-z]查找从小写 a 到小写 z 范围内的字符即查找小写字母。例[A-Z]查找从大写 A 到大写 Z 范围内的字符即查找大写字母。例[A-z]查找从大写 A 到小写 z 范围内的字符即所有大小写的字母。反转匹配范围如果在方括号内添加字符^前缀还可以表示范围之外的字符。例[^abc]查找不在方括号内的字符。例[^0-9]查找非数字。正则模式修正符/g表示该表达式将用来在输入字符串中查找所有可能的匹配返回的结果可以是多个。如果不加/g最多只会匹配一个/i表示匹配的时候不区分大小写/m表示多行匹配什么是多行匹配呢就是匹配换行符两端的潜在匹配。影响正则中的^$符号ps:个人认为多数情况下使用/g/m使用情况较少目前还未遇到这类需求组合界定范围示例除基本范围选择外方括号内可以任意组合筛选范围(方括号中不要加空格否则表达式会匹配空格)// 查找数字与字母与下划线 const rule /[0-9a-zA-Z_]/g // 查找字母abc与数字 const rule /[abc0-9]/g // 查找非小写字母 const rule /[^a-z]/g // 查找首字符为a,第二个字符为b-f第三个字符为g-z const rule /a[b-f][g-z]/g2.选择匹配或运算选择匹配类似于 JavaScript 的逻辑与运算使用竖线|描述表示在两个子模式的匹配结果中任选一个。// 匹配任意数字与字母 const rule /\w|\d/ // 匹配abc efg 123 456中的任意一种 const rule /(abc)|(efg)|(123)|(456)/3.重复匹配重复类量词在正则表达式语法中定义了一组重复类量词如下表所示。它们定义了重复匹配字符的确数或约数。量词描述n匹配任何包含至少一个 n 的字符串(1或n)n*匹配任何包含零个或多个 n 的字符串(0或n)n?匹配任何包含零个或一个 n 的字符串(0或1)n{x}匹配包含 x 个 n 的序列的字符串n{x,y}匹配包含最少 x 个、最多 y 个 n 的序列的字符串n{x,}匹配包含至少 x 个 n 的序列的字符串将重复类量词加入到匹配字符后面表示将尽可能重复匹配该字符通常情况下使用重复类量词都会表现出贪婪性具体情况可以查看2.4。示例如下/d/: 匹配1个及多个数字/d*/: 匹配0个及多个数字/JA?VASCRIPT/: 匹配JVASCRIPT和JAVASCRIPT这两个字符串/JA{4}VASCRIPT/: 匹配JAAAAVASCRIPT/JA{0,1}VASCRIPT/: 匹配JVASCRIPT和JAVASCRIPT这两个字符串/JA{1,3}VASCRIPT/: 匹配JAVASCRIPTJAAVASCRIPT和JAAAVASCRIPT这三个字符串4.惰性匹配重复类量词都具有贪婪性在条件允许的前提下会匹配尽可能多的字符。?{n} 和 {n,m} 重复类具有弱贪婪性表现为贪婪的有限性。* 和 {n,} 重复类具有强贪婪性表现为贪婪的无限性。与贪婪匹配相反惰性匹配将遵循另一种算法在满足条件的前提下尽可能少的匹配字符。 贪婪匹配体现了最大化匹配原则惰性匹配则体现最小化匹配原则。定义惰性匹配的方法在重复类量词后面添加问号?限制词。针对 6 种重复类惰性匹配的简单描述如下{n,m}?尽量匹配 n 次但是为了满足限定条件也可能最多重复 m 次。{n}?尽量匹配 n 次。{n,}?尽量匹配 n 次但是为了满足限定条件也可能匹配任意次。??尽量匹配但是为了满足限定条件也可能最多匹配 1 次相当于 {0,1}?。?尽量匹配 1 次但是为了满足限定条件也可能匹配任意次相当于 {1,}?。*? 尽量不匹配但是为了满足限定条件也可能匹配任意次相当于 {0,}?。下面这段代码将有助于读者对贪婪匹配与惰性匹配的理解,代码中括号的作用详见2.5let str javaScripthtmlcss // 贪婪匹配表现为匹配的无限性 const rule /(.*)/5.分组与引用分组是正则表达式中非常强大的一个功能可以让重复类量词作用于一组字符而非单个字符分组的语法是圆括号包裹(xxx)(abc){2} // 匹配abcabc分组不能放在[]中分组中还可以使用选择表达式(123|456){2} // 匹配 123123、456456、123456、456123和分组相关的概念还有一个捕获分组和非捕获分组分组默认都是捕获的在分组的(后面添加?:可以让分组变为非捕获分组非捕获分组可以提高性能和简化逻辑123.match(/(?:123)/) // 返回 [123] 123.match(/(123)/) // 返回 [123, 123]和分组相关的另一个概念是引用比如在匹配html标签时通常希望xxx/xxx后面的xxx能够和前面保持一致引用的语法是\数字数字代表引用前面第几个捕获分组注意非捕获分组不能被引用([a-z])\/\1 // 可以匹配 span/span 或 div/div等