正则基础

正则表达式是什么?

regular expression 描述匹配否和一定规则的字符串

  1. 是一种规则描述
  2. 用来匹配字符串

工具:

  1. https://regexper.com

正则基础

  • 原意字符
    就是本身的含义: 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
2
var reg = /\d{3,6}/
"23344444".replace(reg, '') // 44

如果我只是想实现 在现3-6数字 把前三个数字替换成空呢

1
2
var 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
2
3
//2015-05-11 => 11/05/2015
var reg = /(\d{4})-(\d{2})-(\d{2})/
"2015-05-11".replace(reg, '$3/$2/$1')

忽略分组

1
2
3
4
5
var reg = /(\d{4})-(?:\d{2})-(\d{2})/
"2015-05-11".replace(reg, '$3/$2/$1')
$1 => 2015
$2 => 11
$3 => $3 //没有捕获就是字符串本身

正则前瞻匹配 (这里的前 指的是xx的后面) 所以它的作用就是找到后面紧跟的是xxx的xxx

1
2
3
现在我们有个需求,匹配下面字符串中的“的”,并且是后面有“中国”两个字。
var str = "美丽的华山,美丽的中国!";
str.search(/的(?=中国)/)

文章作者: webaifei
文章链接: http://yoursite.com/2017/11/09/reg/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 个人博客