正则表达式(RegExp对象)
1 正则表达式字面量,在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译;
正则表达式(RegExp对象)
1.正则表达式字面量,在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译;
2.使用构造函数创建的RegExp,提供了对正则表达式运行时的编译。主要用于当你知道正则表达式的模式会发生改变时,或者你事先并不了解它的模式或者是从其他地方(比如用户的输入),每次使用都会重新编译;
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
如果你不需要访问正则表达式的属性,这个脚本通过另一个方法来创建myArray:
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
如果你想通过一个字符串构建正则表达式,那么这个脚本还有另一种方法:
var myRe = new RegExp('d(b+)d', 'g'); //字符串内特殊字符需转义
或:var myRe = new RegExp(/d(d+)d/,'g')
var myArray = myRe.exec("cdbbdbsbz");
RegExp属性:
RegExp.prototype.constructor 创建该正则对象的构造函数。
RegExp.prototype.global 是否开启全局匹配,也就是匹配目标字符串中所有可能的匹配项,而不是只进行第一次匹配。
RegExp.prototype.ignoreCase 在匹配字符串时是否要忽略字符的大小写。
RegExp.prototype.lastIndex 下次匹配开始的字符串索引位置,这个属性只有在使用g参数时可用
RegExp.prototype.multiline 是否开启多行模式匹配(影响 ^ 和 $ 的行为)。
RegExp.prototype.source 正则对象的源模式文本。在正则表达式创建时更新,不执行
RegExp.prototype.sticky (ES6)是否开启粘滞匹配。
RegExp方法:每次执行exec()、test()方法后,就立即自动将lastIndex设置下次匹配开始位置,而String的方法则总是将lastIndex重置为0
myRe.exec(str) 如果成功匹配,返回一个数组,并且更新正则表达式对象的属性。返回的数组包括匹配的字符串作为第一个元素,紧接着一个元素对应一个( )保存的子表达式匹配到的子串;如果匹配失败,exec 方法将返回 null。
返回的数组属性:index指匹配到的字符位于原始字符串的基于0的索引值;input指原始字符串;
更新后的正则表达式属性: lastIndex 下一次匹配开始的位置; source 正则模式的字符串;
myRe.test(str); 测试一个字符串中是否匹配,它返回true或false
使用正则表达式的方法
方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。
正则表达式标志
标志 描述
g 全局搜索。
i 不区分大小写搜索。
m 多行搜索。'^','$'多行模式时匹配的开始或结束输入字符串中的每一行,而不是整个字符串的开始或结束
y 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志
u Unicode。将模式视为Unicode码位(code points)序列