正则表达式测试网站:https://regexper.com/
前端调试网站:http://jsbin.com/xicayoligi/edit?js,console
1 RegExp初始化
js通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象
1、使用自变量
var reg = /\bis\b/g;
2、使用构造函数
var reg = new RegExp('\\bis\\b','g');
2 修饰符
g:global,全文搜索,不添加,搜索到第一个匹配为止
i:ignore case,忽略大小写,默认大小写敏感
m:multiple lines,多行搜索
3 元字符
正则表达式由两种基本字符类型组成:
- 原义文本字符
- 元字符
含义:元字符是有特殊含义的非字母字符,例如:\b
3.1 字符类
[ ]匹配一类字符
字符取反
3.2 范围类
“-”用在[ ]中表示范围
3.3 预定义类
3.4 边界
3.5 量词
3.6 贪婪模式和非贪婪模式
默认是贪婪模式,在量词后面加?即可变为非贪婪模式
4 分组
( )可以分组,使量词作用于分组
4.1 或
| 可以表示或
4.2 反向引用
用括号捕获分组
用?:忽略分组
5 前瞻
正则表达式在匹配到规则时,向前检查是否符合断言,这就是前瞻;符合为正向匹配,反之为负向匹配。
示例:
6 JS对象
6.1 属性
global:是否全文搜索,默认false
ignoreCase:是否大小写敏感,默认false
multiline:多行搜索,默认false
lastIndex:正则表达式匹配内容的最后一个字符的下一个位置
source:正则表达式的文本字符串
6.2 方法
RegExp.prototype.test(str)
用于测试str中是否存在匹配正则表达式的字符串,若存在返回ture,否则返回false
例子:
如果是全局搜索,每一次搜索就是从lastIndex处开始匹配
RegExp.prototype.exec(str)
匹配到就返回一个数组,反之为null
数组里边的变量含义为:
[匹配到的字符串,分组一,分组二...分组n]
示例1:
运行两次结果:
可以看出,非全局下lastIndex不生效
示例2:
运行结果:
匹配到两个字符串,lastIndex是在匹配到的字符串的下一位的序号,index则是匹配到的字符串的第一位的序号,后面是exec返回的数组
7 字符串对象方法
String.prototype.search(reg)
检索字符串,忽略全局匹配,方法返回匹配结果index,否则返回-1
例子:
String.prototype.match(reg)
返回数组,反之null;非全局调用和exec()一样,返回[匹配到的字符串,分组一,分组二...分组n]这种形式,全局调用下返回一个由匹配字符串组成的数组
例子:
String.prototype.split(reg)
返回数组
String.prototype.replace(reg,str)
替换字符串
String.prototype.replace(reg,function(match,group1,group2...groupN,index,origin) {})
替换字符串