写在开头。你平时是怎么学习正则化的?你在工作中经常使用它吗?是不是学了一会儿就忘了?是不是用的时候总是“用”,对繁杂背后的原理没有深刻理解?如果以上任何一条击中了你,恭喜你,你和我一样是一个普通人,在规律性上是个大头。本文不带你飞。要想深入研究,还是自己想想吧。这里只是对基本概念的解释。这才是真正的学习之道。废话不多说,先说概念。元字符元字符含义^就像一顶帽子,从头开始,所以它要匹配字符串的开头。$就像一个美元符号,意思是在最后支付,匹配一个字符串的结尾。.匹配除换行符(n,r)之外的任意单个字符w匹配字母、数字、下划线我们可以这样表达[A-Za-z0-9_]W正好是小写w的反义词,匹配非字母、数字,下划线d匹配一个数字字符相当于[0-9]D世界上的东西总是不兼容的,所以它意味着匹配一个非数字字符s匹配任何不可见的字符,包括空格,制表符和换页符号。相当于[fnrtv]S匹配任何非空白字符。相当于1个或多个只是一些主要的常用元字符。列表太多,但你记不住。需要用到的时候查字典就可以了。当然,你应该记住那些常见的,以防你需要在面试问题中使用它们,你永远无法在字典中查找它。量词见明义,与量有关。量词含义*这个字符简直太常用了,它的意思是重复零次或多次,等于{0,}比如/*.doc/匹配所有word文档。?重复0次或1次,等于{0,1}。+重复1次或多次,等于{1,}。{n}重复n次。{n,}重复n次或n次以上{n,m}重复n次到m次。工作中常用的就是上面这些,比如/^d{5,12}$/代表5-12的一个数。/^w+/匹配一行的第一个单词字符集。如果我们要匹配一个没有预定义元字符的字符集,只需要在方括号中列出即可,比如[abcd]或[a-d]来匹配a-d的字母,收集起来比较省力.例如[0-9]与d同义,[A-Za-z0-9_]等同于w(这里只考虑英文)。我们从一个匹配座机号码的表达式来分析,例如:/\(?0\d{2}[)-]?\d{8}/图形化的看一下:这张图使用了REGEXPER工具,我们可以很清楚see(0or1occurrence,followedbya0,followedby2numbers,andthen)aspaceand-选择其中一个,最后一个后面跟着8个数字。分支的意思其实有点类似于我们平时的代码分支。有几条规则。如果满足任何规则,就可以了。具体来说,不同的规则由|分隔特点。比如上面的座机电话验证规则,不难发现011)12345678的格式也是可以匹配的,所以我们需要一个规则来区分前面的“(”,后面的“)”,所以我们在原来的一些基础上添加分支条件:/\(0\d{2}\)[-]?\d{8}|0\d{2}[-]?\d{8}/的上图清晰可见,有两条路径。我们需要特别注意的是:在使用|时symbol,匹配规则是从左到右,所以当满足条件时,后面不再匹配。分组前面我们了解到,一组字符被[]包裹起来,那么如果要重复多个字符怎么办呢?我们可以用括号来指定子表达式,也就是所谓的分组。例如,在/([1-4]){1,3}/下面重复一组数字更好理解。例如,除了纯数字多出的字符2,元字符中还有下面列出的几种常见反义词。|元字符|含义|瓦|匹配任何非字母、数字、下划线或汉字的字符|D|世界上的事物总是不相容的,所以它的意思是匹配一个非数字字符|年代|匹配任何非空白字符。相当于3个backreferences的概念,理解起来相当费脑筋。如果我们在一个表达式中进行组捕获,从左到右的顺序是1,2,3...,比如/(d{4})-(d{2})-2/,则有两组在在这个表达式前面,则/2表示重复匹配(d{2}),则可以匹配字符串'4444-11-11'。让我们看看下图:零宽度断言(lookaroundassertions)也被翻译成look-arounds。根据方向不同,分为前瞻和后视,根据判断原则分为肯定和否定;如下:从左到右/图案前面的位置为负数/审核后贴出/倒序/从右到左/图案后面的位置为正数/正数(?=pattern)(?<=pattern)负数/negative(?!pattern)(?).*(?=<\/\1>)/.test('')仔细看看上面的例子。GreedyandLazy贪心模式——在匹配成功的前提下尽量多匹配懒惰模式——在匹配成功的前提下尽量少匹配/.*bbb/g.test('abbbaabbbaaabbb1234')/.*?bbb/g.test('abbbaabbbaaabbb1234')贪婪模式用于匹配优先级量词修饰的子表达式惰性模式用于匹配优先级量词修饰的子表达式,但尽可能少的重复+?重复1次或多次,但重复次数越少越好??重复0次或1次,但尽可能少地重复{n,m}次?重复n到m次,但尽可能少Repeatless{n,}?重复n次以上,但尽量少重复[正则](https://developer.mozilla.org...如果想继续讨论或学习更多知识,欢迎加入QQ或微信一起讨论:854280588fnrtv?d?fnrtv?
