JavaScript正则表达式

正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。这些模式被用于RegExp的exec和test方法,以及String的match、replace、search和split方法。

创建正则表达式

有两种方法可以构建一个正则表达式:

1.使用一个正则表达式字面量,其由包含在斜杠之间的模式组成:

var reg = /pattern/flags

2.调用RegExp对象的构造函数:

var reg = new RegExp(pattern, [,flags])

元字符

元字符是在正则表达式中有特殊意义的非字母字符,包括:

* + ? ^ $ . | \ ( ) { } []

字符类

类是指符合某些特性的对象,一个泛指,而不是特指某个字符

可以使用元字符[]来构建一个简单的类
例如:[abc]

可以使用元字符^创建反向类(不属于某类的内容)

例如 [^abc] 表示不是a或b或c的内容

范围类

可以使用[a-z]来连接两个字符表示从a到z的任意字符
可以连写 [a-zA-Z]

预定义类

包括 . \d \D \s \S \w \W等,具体含义查阅MDNMDN正则表达式

边界字符:^(以xxx开始)、$(以xxx结束)、\b(单词边界)、\B(非单词边界)

量词

量词包括 ?(出现0次或1次,最多出现一次) 
         +(出现1次或多次,至少出现一次) 
         *(出现0次或多次,任意次) 
         {n}(出现n次)
         {n,m}(出现n到m次)
         {n,}(至少出现n次)

贪婪模式和非贪婪模式

当指定一个\d{3,6}时,正则表达式默认为贪婪模式,会尽可能多的匹配(6次)

在量词后面加上?可以切换到非贪婪模式,正则表达式会尽可能少的匹配

分组

使用()可以达到分组的功能,使量词作用于分组

例如:a1b2c3d4.replace(/[a-z]\d{3}/g, 'x')只会匹配到数字
而使用a1b2c3d4.replace(/([a-z]\d){3}/g, 'x')则会替换为xd4

前瞻

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

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

后顾方向相反,但JavaScript不支持后顾

正向前瞻 exp(?=assert)
负向前瞻 exp(?!assert)
例如: 'a2*3' .replace(/\w(?=\d)/g, 'x')

对象属性

g  全文搜索
i  忽略大小写
m  多行搜索
lastIndex  当前表达式匹配内容的最后一个字符的下一个位置

对象方法

test()
exec()

字符串对象方法:
match()
replace()
search()

本文总阅读量