奇技淫巧之正则表达式

undefined

收集自己学习正则的知识点

RegExp对象

定义

字面量定义var re = /p1/p2;

该方式创建的正则对象,参数p1被两个正斜杠包裹,必选;参数p2位于第二个正斜杠后面;
注意:两个参数p1和p2都无需用双引号包裹。

1
2
var reg = /\bis\b/g;
'He is a boy. This is a dog.'.replace(reg,'IS');

构造函数 var regx = new RegExp();

该方式创建正则对象,构造函数可以接收两个参数p1和p2;p1表示匹配模式,必需;p2表示检索条件,可选;参数都是以双引号包裹的字符串,无需正斜杠包裹。

  1. 如果采用正则对象方式,RegExg接收的是字符串,\反斜杠是转义字符,\d会变成d,此时需要使用两个反斜杠,即\\d来达到\d效果;但是在字面量方式中,不是字符串,所以使用一个反斜杠即可。
  2. 正则对象方式,可以接收参数,而正则字面量方式不可以。
    1
    var reg = new RegExp('\\bis\\b','g');//在js中`\`需要转义,所以会出现`\\`

修饰符与对象属性

/g: global全文搜索,不添加的话搜索到第一个匹配停止
/i: ignore case 忽略大小写,默认大小写敏感
/m: multiple lines 多行搜索
lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置
source: 正则表达式的文本字符串

方法

text()

返回boolean,表示是否有匹配的字符串。如果有满足的字符串,则返回true,后保存lastIndex,并且在下一次匹配时从lastIndex开始。如果没有lastIndex设置为0

exec()

返回符合正则表达式的字符串结果数组。

非全局调用

返回数组。
第一个元素:与正则表达式匹配的文本
第二个元素:与分组(子表达式)匹配的文本,并以此类推

全局调用

返回数组:

  • index 表明匹配文本的第一个字符位置

正则表达式

元字符

  • 原义文本字符
  • 元字符:在正则表达式中有特殊含义的非字母字符
  • *+?$^.|\(){}[]

范围类

字符类,或操作:[abc]
字符类,取反操作:[^abc]
范围类,闭区间,并且支持连写:[a-zA-Z]
在范围类中,如果-前后没有被字符包围,则表示-的含义

预定类

任意字符,除了回车符合换行符之外的所有字符:.
数字字符:\d
非数字字符:\D
空白符:\s(space)
非空白符:\S
单词字符(字母、数字下划线):\w
非单词字符:\W

边界

开头:^
结尾:$
单词边界:\b
非单词边界:\B

量词

出现零次或一次:?
出现一次或者多次:+
出现零次或者多次:*
出现n次: {n}
出现n到m次: {n,m}
至少出现n次: {n,}
默认贪婪模式进行匹配;
非贪婪模式在量词后面加?

分组

分组:()
可以使内容作用于量词:/(\w\d){3}/g
或:|把前后的内容分割开
反向引用,捕获分组内容(有分组的情况下):$1
忽略分组,不捕获,在分组内开头加上?:

前瞻

正则表达式从文本头部向尾部开始就解析,文本尾部方向,成为“前”。文本头部,成为“尾”

前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言。

正向前瞻

exp(?=assert)

负向前瞻

exp(?!assert)

收录一些常用的表达式

  1. 匹配时间戳:2017-07-27
    1
    2
    var reg = new RegExp('([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))');
    reg.exec(date)[0];

2.

正则表达式图形化网站