正则表达式一个劲的忘,这次写个博客加深一下理解。
许多编程语言中都有内置的正则表达式,对处理字符串非常有用,正则表达式(regular expression)的语法大体上相同,不同的语言可能会稍微不同,这里以javascript为例。
RegExp对象
javascript中实例化RegExp对象:
- 字面量
var reg = /[\d]+/g
- 构造函数
var reg = new RegExp(“[\\d]+”,g);
其中g是修饰符
修饰符 | 功能 |
---|---|
g | global全文搜索(第一行),不添加只匹配第一个 |
i | ignore case 忽略大小写,默认大小写敏感 |
m | multiple lines多行匹配 |
在正则表达式中的表示特殊含义的非字母字符
字符类
正则表达式中使用’[]’表示一类字符,比如[abc]匹配的就是’abc’中的一个,
范围
字符类中可以同过’-‘表示范围,比如[a-z]表示全部的小写字母,如果想包含’-‘这个字符可以在最后添加:[a-z-]这就表示所以小写字母和’-‘这个字符.
取反
^表示取反,[^abc]表示不是abc的字符
边界
字符 | 含义 |
---|---|
^ | 以xxxx开头(不再[]中时) |
$ | 以xxxx结尾 |
\b | 单词的开始或结束 |
\B | 非单词边界 |
量词
字符 | 含义 |
---|---|
? | 出现0到1次 |
+ | 至少出现1次 |
* | 出现0到多次 |
{n} | 出现n次 |
{n,} | 出现n到多次 |
{n,m} | 出现n到m次 |
元字符
字符 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
\d | 匹配任意数字字符 |
\D | 匹配任意非数字的字符 |
\w | 匹配字母或数字或下划线或汉字 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\s | 匹配任意空白符的字符 |
\S | 匹配任意不是空白符的字符 |
[\u4e00-\u9fa5] | 匹配任意单个汉字 |
贪婪模式和非贪婪模式
贪婪模式
比如:”1234565677wefdsf”.replace(/[\d]{3,6}/,”X”);
将3到6个数字替换成X,是将3个呢还是4个还是5个6个数字替换成一个X呢,运行的结果是”X5677wefdsf”,也就是尽可能多的匹配,这就是贪婪模式,是正则表达式的默认匹配方式。
非贪婪模式
如果想尽可能少的匹配,就是非贪婪模式,就是在正则表达式的最后加上’?’就是非贪婪模式。
“1234565677wefdsf”.replace(/[\d]{3,6}?/,”X”);
运行结果是:”X4565677wefdsf”,只匹配了3个。
分组
使用量词只能作用于紧挨着它的字符,不能作用多个,而分组则可以达到作用于一组,比如afda+,只能表示a出现1次或者多次,而不能表示afda,使用分组(afda)+使两次作用整个括号里的(一组);
或
在分组中使用’|’可以达到或的效果。(ab|cd)表示ab或者cd
反向引用
- 分组捕获:用$1..$n表示第一组到第n组。
- 忽略分组:分组中加上?:表示忽略此分组,(?:ab)(cd),$1代表的是分组(cd)。