正则表达式是用于匹配字符串中字符组合的模式。在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 当前表达式匹配内容的最后一个字符的下一个位置