正则表达式是一种描述字符串匹配的模式,用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
元字符:
常用元字符 | 含义 |
. | 匹配除换行符意外的任意字符 |
w | 匹配字母、数字、下划线 |
W | 匹配不是字母、不是数字、不是下划线 |
d | 匹配数字相当于[0-9] |
D | 匹配不是数字的字符 |
s | 匹配不可见字符,包括空格,换行符等 |
S | 匹配可见字符 |
匹配一个词的边界 | |
B | 匹配一个非单词边界 |
^ | 字符串的开始位置 |
$ | 字符串的结束位置 |
表示一个字符全集:/wW/、/dD/、/sS/、/./s 等
量词:
量词 | 含义 |
* | 重复任意次数,相当于{0,} |
? | 重复 0 或 1 次,相当于{0,1} |
+ | 重复 1 次或更多次,相当于{1,} |
{n} | 重复 n 次 |
{n,} | 重复 n 次或大于 n 次 |
{n,m} | 重复 n 到 m 次 |
分支&字符集
- (a|b|c)
- [abc] == [a-c]
- [^abc] == [^a-c]
分组&引用
/(d{4})-(d{2})-(d{2})/
/(d{4})-(d{2})-2/--------------------2相当于(d{2})
/(?<year>d{4})-(?<month>d{2})-(?<day>d{2})/ ------------分组命名,group.year,group.month,group.day
/(?<year>d{4})-(?<month>d{2})-k<month>/-----------------k<>,命名向后引用
环视
正向/预测先行/顺序/从左到右/pattern的前面位置 | 负向/回顾后发/逆序/从右到左/pattern的后面位置 | |
肯定/正 | (?=pattern) | (?<=pattern) |
否定/负 | (?!pattern) | (?<!pattern) |
贪婪&惰性
贪婪——在匹配成功的前提下,尽可能多的匹配
惰性——在匹配成功的前提下,尽可能少的匹配
/.*bbb/g.test('abbbaabbba1234')
/.*?bbb/g.test('abbbaabbba1234')
修饰符&标志
g(表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止)
i(不区分大小写)
m(多行模式)
y(y 修饰符的作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的含义)
u(表示按unicode(utf-8)匹配,主要针对多字节比如汉字)