正则表达式是什么?
regular expression 描述匹配否和一定规则的字符串
- 是一种规则描述
- 用来匹配字符串
工具:
正则基础
- 原意字符
就是本身的含义: a=>a - 元字符,在正则表达式中有特殊含义的非字母字符:
? + * $ ^ | \ . + () {} []
字符类
书写格式 | 匹配含义 |
---|---|
. | 任意字符 |
/d | 数字,和[0-9]效果一样 |
/D | 非数字,和[^0-9] 效果一样 |
/w | 字母和下划线 [a-zA-Z_] |
/W | 非字母和下划线 [^a-zA-Z_] |
/b | 单词边界 |
/B | 非单词边界 |
/s | 空格 tab 等 |
^xx | 以xx开头 |
xx$ | 以xx结束 |
- | 从哪到哪: [a-z] |
[] | 或 [abc] ,a 或b或c |
() | 分组 |
量词
书写格式 | 匹配含义 |
---|---|
* | 任意次 |
+ | 至少一次 |
? | 一次或者0次 |
{n} | 正好n次 |
{n,} | 至少n次,注意逗号后面不能有空格 |
{0,n} | 至多n次 |
{n,m} | 至少n次, 至多m次 |
贪婪模式 和 非贪婪模式
贪婪模式,尽可能多的匹配 ,如:1
2var reg = /\d{3,6}/
"23344444".replace(reg, '') // 44
如果我只是想实现 在现3-6数字 把前三个数字替换成空呢1
2var reg = /\d{3,6}?/
"23344444".replace(reg, '') // 44444
分组
将几个字符作为单元进行匹配1
2
3
4//匹配 连续出现3次ngnice的字符串
var reg = /ngnice{3}/ //error
匹配结果=> ngniceee
var reg = /(ngnice){3}/ //right
分组中的反向引用,即我们可以把分组捕获的值当作一个变量来引用
1 | //2015-05-11 => 11/05/2015 |
忽略分组1
2
3
4
5var reg = /(\d{4})-(?:\d{2})-(\d{2})/
"2015-05-11".replace(reg, '$3/$2/$1')
$1 => 2015
$2 => 11
$3 => $3 //没有捕获就是字符串本身
正则前瞻匹配 (这里的前 指的是xx的后面) 所以它的作用就是找到后面紧跟的是xxx的xxx1
2
3现在我们有个需求,匹配下面字符串中的“的”,并且是后面有“中国”两个字。
var str = "美丽的华山,美丽的中国!";
str.search(/的(?=中国)/)