正则表达式一个劲的忘,这次写个博客加深一下理解。
许多编程语言中都有内置的正则表达式,对处理字符串非常有用,正则表达式(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)。
本文详细介绍JavaScript中的正则表达式应用,包括RegExp对象的创建、修饰符的作用、特殊字符的意义及使用方法,并通过实例解释贪婪与非贪婪模式的区别。
3338

被折叠的 条评论
为什么被折叠?



