若是把正则看作一门语言,那么元字符就是其最基本的语法,只有熟练掌握了元字符,才能敲开正则的大门。熟悉的同窗能够跳过这一部分。
经常使用的元字符有一下这些:正则表达式
^
&
,分别表示开头和结尾\w
,也即[a-zA-Z0-9_]
\d
,也即[0-9]\b
,要注意的是它仅对数字和英文字母有效,好比/a\b/
匹配 'ba'
中的a\s
,*和{0,}, ?和{0,1} , +和{1,}
还有一种特殊的元字符,叫字符集[]
,[^ ]
分别表明正向字符集和反向字符集,分别表示匹配(不匹配)其中任意一个字符。反向字符集中的^
必须在开头哦。
另外要注意的是,元字符在字符集中不必定是元字符,好比\b
,另外,字符集中也有元字符-
,表示范围链接。[a-b]
没法匹配'-'
哦。
字符集里面还能够表示unicode字符,好比常见的汉字的正则表达式\u4e00-\u9fa5
,这个范围就表明unicode字符集中CJK统一表意符中的一部分,String.fromCharCode(parseInt('4e00',16))
能够获得'一'
数组
首先咱们来看下面这张图片,加不加()对结果有何影响。spa
咱们能够看到,没有括号,返回的结果里就少了一个东西。那么返回的数组的第二位表示啥呢?咱们能够参阅MDN中的解释。翻译
翻译成白话,就是数组中的第一个值表示匹配中的字符串,第二个日后,就是捕获到的匹配项。也就是说我加了(),正则就能够捕获到其中的匹配项。input,index很好理解,那groups有事啥呢?为啥一直没见过它里面有值。
好的,咱们再来看下一张图code
这个正则的写法叫命名捕获组,它捕获的内容就会在groups中也存一份。对象
那么如何理解捕获呢?咱们只要理解主语,宾语,如何获取,捕获顺序就好了。
主语天然是正则,宾语就是括号中的匹配项。
正则捕获后咱们可使用RegExp.$1获取捕获的第一个内容,$2表示捕获的第二个内容,以此类推,也能够从match,exec等js方法返回值中获取
那么捕获顺序如何肯定呢,咱们能够再看下一张图:blog
很显然,它是从外往内,从左往右的一个顺序捕获的。图片
既然有捕获,那也必定有非捕获。()还有一种功能就是将其中的多个匹配项当作一个总体。那么若是我只想捕获这个总体中的一部分呢?ip
一图胜千言,当咱们不须要捕获时,就可使用(?: )
这种写法了。unicode
以上就是捕获的基本用法,不过还有个具名捕获组须要掌握。
?<name>
$<name>
获取\k<name>
那么反向引用是什么意思呢?咱们下一期再继续。