正则表达式基础学习
正则表达式的创建
1. var reg = /pattern/;
2. var reg = new RegExp('pattern');
字符类
字符 |
匹配 |
[…] |
方括号内的任意字符 |
[^…] |
不在方括号内的任意字符 |
. |
除换行符和其他Unicode行终止符之外的任意字符 |
\w |
任何ASCII字符组成的单词,等价于[a-zA-Z0-9] |
\W |
任何非ASCII字符组成的单词,等价于[^a-zA-Z0-9] |
\s |
任何Unicode空白符 |
\S |
任何非Unicode空白符的字符 |
\d |
任何ASCII数字,等价于[0-9] |
\D |
除了ASCII数字之外的任何字符,等价于[^0-9] |
[\b] |
退格直接量(特例) |
重复
字符 |
含义 |
{n,m} |
匹配前一项至少n次,但不超过m次 |
{n,} |
匹配前一项n次或者更多次 |
{n} |
匹配前一项n次 |
? |
匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1} |
+ |
匹配前一项1次或多次,等价于{1,} |
* |
匹配前一项0次或多次,等价于{0,} |
非贪婪的重复:上面的重复匹配字符是尽可能多的匹配字符,这种成为贪婪的重复,如果需要尽可能少的匹配,这种称为非贪婪的重复,只需要在待匹配的字符后面加一个?即可,有的时候会有一些与期望不同的情况,所以在实际使用的时候注意正则匹配的原理,它是从开头进行匹配的,不会进行跳跃
选择、分组和引用
字符 |
含义 |
| |
选择,匹配的是该符号左边的子表达式或右边的子表达式 |
(…) |
组合,将集合项合并成一个单元,可用过’*’、’+’、’?’和’|’等符号加以修饰,而且可以记住这个匹配的字符,供后面的引用使用 |
(?:…) |
只组合,与上面的基本相同,唯一的区别是不会记忆匹配的字符,后面无法引用 |
\n |
引用,和前面的(…)一起使用,找和第n和括号匹配的记忆字符,注意查第几个的时候以左括号为基准 |
指定匹配位置
字符 |
含义 |
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
\b |
匹配一个单词的边界 |
\B |
匹配非单词边界的位置 |
(?=p) |
零宽正向先行判断,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符(匹配结果不包括p) |
(?!p) |
零宽负向先行判断,要求接下来的字符不与p匹配 |
修饰符
字符 |
含义 |
i |
执行不区分大小写的匹配 |
g |
执行一个全局匹配 |
m |
多行匹配 |
用于匹配的string方法
- search() 参数为正则表达式,返回匹配成功的子串的起始位置,否则返回-1,不支持g,默认忽略
- replace() 有两个参数,第一个为匹配的正则表达式,第二个为要替换成的字符串,可以为’$’+数字,与正则表达式中的引用相同,只不过这里用’&’而不是’',第二个参数也可以是一个函数,必须有一个返回值,返回值为替换的值,这个函数的参数为匹配成功的字符串
- match() 返回值为一个数组,其中,当参数正则表达式执行的不是全局检索(g)时,第一个元素为匹配的字符串,其余元素为正则表达式中括号匹配的子表达式,且只返回第一个匹配成功的;否则,会返回所有满足正则表达式的元素构成的数组,不返回括号中的子表达式
- split() 该方法把字符串按照参数拆分成数组,参数可以为正则表达式
RegExp对象
- 属性
global:是否有g属性 ignoreCase:是否有i属性 multiline:是否有m属性 lastIndex:最后匹配的字符位置(注意,在一些匹配的时候需要重置) source:对应正则表达式的源文本
- 方法
- exec() 返回值为一个数组,第一个元素为匹配的字符串,其余元素为正则表达式中括号匹配的子表达式,且只返回第一个匹配成功的,返回值有index(发生匹配的位置)和input(正在检索的字符串)属性,当同一个正则表达式再次调用的时候,会从lastIndex继续检索,返回值相同,当没有匹配结果的时候,lastIndex重置为0
- test() 判断时候匹配,成功返回true,否则返回false