关于正则表达式的方法属性分为两种,一个是RegExp对象方法,其中包含exec和test方法,另外一个是string对象方法,包含match,search,replace,split,这些string方法在原本的基础上还支持正则表达式,扩充了更为强大的能力。下面我将分别总结各个方法的特性和示例以供参考总结。
RegExp对象属性
- global是否全文搜索,默认false。
- ignore case是否大小写敏感,默认是false。
- multiline多行搜索,默认值是false。
- lastIndex是当前表达式匹配内容的最后一个字符的下一个位置。
- source正则表达式的文本字符串。
let reg1 = /\d/;
let reg2 = /\d/gim;
reg1.global; //false
reg1.ignoreCase; //false
reg1.multiline; //false
reg2.global; //true
reg2.ignoreCase; //true
reg2.multiline; //true
RegExp对象方法
RegExp.prototype.exec(string)
功能说明:该函数通过对指定你的字符串进行一次匹配检测,获取字符串中的第一个与正则表达式的内容,并且将匹配的内容和子匹配的结果存放在返回数组中
基本方法:RegExp.exec(string)
exec() 方法用于检索字符串中的正则表达式的匹配。返回值是一个数组,但是此数组的内容和正则对象是否是全局匹配有着很大关系
- 没有g修饰符:
在非全局匹配模式下,只能够在字符串中匹配一次,如果没有找到匹配的字符串,那么返回null,否则将返回一个数组,数组的第0个元素存储的是匹配字符串,第1个元素存放的是第一个引用型分组(子表达式)匹配的字符串,第2个元素存放的是第二个引用型分组(子表达式)匹配的字符串,依次类推。同时此数组还包括两个对象属性,index属性声明的是匹配字符串的起始字符在要匹配的完整字符串中的位置,input属性声明的是对要匹配的完整字符串的引用。
let str = 'zhaodao'
let reg = /(a)o/ // 将a用括号起来是为了演示返回数组的第二个元素特意加上的
let ret = reg.exec(str); //ret是结果数组
console.log(ret);
// ["ao", "a", index: 2, input: "zhaodao", groups: undefined]
返回数组是有以下元素组成的
- 第一个元素(“ao”)是与正则表达式相匹配的文本
- 第二个元素是(“a”)reg对象的第一个子表达式相匹配的文本(如果有的话)。
- index 匹配到的字符位于原始字符串的基于0的索引值 (2)
- input 原始字符串(zhaodao)
- groups 具名组对象,ES2018 引入了 具名组匹配
- 具有g修饰符:
在全局匹配模式下,此函数返回值同样是一个数组,并且也只能够在字符串中匹配一次。不过此时,此函数一般会和lastIndex属性匹配使用,此函数会在lastIndex属性指定的字符处开始检索字符串,当exec()找到与表达式相匹配的字符串时,在匹配后,它将lastIndex 属性设置为匹配字符串的最后一个字符的下一个位置。可以通过反复调用exec()函数遍历字符串中的所有匹配,当exec()函数再也找不到匹配的文本时,它将返回null,并把lastIndex 属性重置为0。
数组的内容结构和没有g修饰符时完全相同。
let str = 'zhaodao'
let reg = /\wao/g
let ret
while ((ret = reg.exec(str)) !== null) {
console.log(reg.lastIndex, ret.index, ret)
}
//