JavaScript正则表达式基础
一、简介
正则表达式是 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
在JavaScript中,正则可以有两种初始化的方式
-
/xxx/
字面量 - new 一个RegExp对象的实例
如何创建一个正则表达式 | MDN
二、术语
1.元字符
元字符就是指那些在正则表达式中具有特殊意义的专用字符。正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。
比如
\ ^ $ * + ?
等等,只要是有特殊含义的,就都是元字符
2.量词
正则里表示数量的词
比如
{n} {n,} {n,m}
(这里的n和m是非负整数)
3.分组和引用
有时,我们需要对某一块的正则分组,以便将来引用它,如:
/(ab)c(de)\1/
这里的ab就是一个分组, de也是一个分组。\1是对第1个分组(也就是ab这个分组)的引用,引用使我们不需要重复写正则片段
4.转义
\
就是一个转义字符,它表示将下一个字符标记为一个特殊字符
比如:
\s
能匹配任何空白字符,s
本身是一个正常文本(不是元字符),但是因为前面的\
是转义字符,\s
就被赋予了新的含义
\d
能匹配一个数字字符,d
本身是一个正常文本(不是元字符),但是因为前面的\是转义字符,\d
也就被赋予了新的含义
5.零宽断言
有时我们需要捕获的内容前后必须是特定内容,但是又不希望这些特定内容出现在捕获里,就要用到零宽断言
比如:
(?=pattern)
正向肯定预查,在任何匹配pattern
的字符串开始处匹配查找字符串。
(?!pattern)
正向否定预查,在任何不匹配pattern
的字符串开始处匹配查找字符串。
这些特定内容不会出现在捕获里
6.贪婪 & 惰性
贪婪:它会根据前导字符去匹配尽可能多的内容。
惰性(非贪婪):匹配尽可能少的内容。
如果
?
紧跟在任何一个其他限制符*, +, ?, {n}, {n,}, {n,m}
后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串。
默认是贪婪模式,也就是说,会尽可能多的匹配搜索的字符串
比如:
对于字符串
oooo
,/a+?/
将匹配单个a
,而/a+/
将匹配所有a
。
其中/a+?/
由于有一个?
,是惰性模式(非贪婪),所以一旦匹配到了一个a
,就停止;
而/a+/
是默认到贪婪模式,所以会尽可能地匹配更多内容,所以会匹配所有的a
;
(完)