js正则表达式(七)
一、正则表达式对象的创建
方法一:
使用构造函数的形式:
var pattern = new RegExp('正则表达式','修饰符'); var pattern = new RegExp('hello','igm'); //需要匹配的字串为'hello'
方法二:
使用字面量的形式:
var pattern = /正则表达式/修饰符; var pattern = /hello/igm; //需要匹配的字串为'hello'
正则表达式中的修饰符:
i (ignore case) 匹配时不区分字母的大小写 【不区分大小写】
g (global) 匹配时整个字符串中查找 【全局】
m (multiline) 匹配时多行查找 【多行】
二、正则表达式原型对象中的属性及方法
⑴原型属性:
RegExp.prototype.global 【pattern.global】
布尔值,表明这个正则表达式是否带有修饰符g
RegExp.prototype.ignoreCase 【pattern.ignore】
布尔值,表明这个正则表达式是否带有修饰符i
RegExp.prototype.multiline 【pattern.multiline】
布尔值,表明这个正则表达式是否带有修饰符m
RegExp.prototype.lastIndex
如果匹配模式带有g,使用test()和exec()方法时,这个属性会存储在整个字符串中下一次检索的开始位置;
如果没有带g,则lastIndex一直为0
RegExp.prototype.source 【pattern.source】
包含正则表达式文本
⑵原型方法:
exec()方法和test()方法与lastIndex间关系影响:
a、如果正则表达式中有修饰符"g",pattern对象中会维护lastIndex属性,记录下一次开始的位置,当第二次执行exec的时候,从lastIndex开始检索。
b、如果正则表达式中没有修饰符"g",不会维护lastIndex属性,每次执行从开始位置0开始检索
1、RegExp.prototype.exec():【返回值:匹配到的结果数组或null】
var result = pattern.exec(str);
2、RegExp.prototype.test():【返回值:匹配到返回true;否则,返回false】
var pattern = pattern.test(str);
3、RegExp.prototype.toString():
将正则表达式对象转化为相应的字符串形式
三、Javascript中String字符串对正则表达式的支持的相关方法
1、search()
str.search(正则表达式);
a.如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。
b.不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
2、match() 【最常用的正则表达式方法】
str.match(正则表达式);
a.返回由匹配结果组成的数组或者null。
注意:【正则表达式是否有g修饰时】
a.没有g修饰符时,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,
剩余的元素则是由正则表达式中用圆括号括起来的匹配到的子表达式。
eg:
console.log("HELLO world hello".match(/(hello)/i)); //["HELLO","HELLO"] 前者为匹配到的字符串,后者为由正则表达式中用圆括号括起来的子表达式【与匹配串样式相同】
b.有g修饰符时,则该方法返回的数组包含字符串中所有匹配结果。
eg:
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
3、replace() 【用以执行检索和替换操作】
str.replace(正则表达式,要替换的字符串);
eg:
"helloWorld HEllo".replace(/hello/gi,“JavaScript”); //"JavaScriptWorld JavaScript"
4、split() 【字符串转成数组】
a.参数可以为字符串,也可以为正则表达式
b.以参数字串或正则表达式形式分割字符串,并将后面分割的部分组成返回数组中的元素
eg:
"1,2,3,4,5".split(","); //["1","2","3","4","5"] 以,分割字符串并返回一个新数组 "1, 2, 3, 4, 5".split(/\s*,\s*/); //["1","2","3","4","5"] 允许分隔符左右两边留有空白
四、正则表达式中的贪婪模式与非贪婪模式(懒惰模式) 【默认为贪婪模式】
贪婪模式:在正则表达式中单个模块含有次数情况时:优先选择最多次数进行匹配
非贪婪模式:在正则表达式中单个模块含有次数情况时:优先选择最少次数进行匹配
贪婪模式转化为非贪婪模式:
在正则表达式单个模块设置的次数后面加?,这样可以将贪婪模式转化为非贪婪模式
eg:
var str = 'hello world javaScript'; var pattern = /\w{3,8}/i; console.log(pattern.exec(str)); //贪婪模式:结果为['hello'] var pattern = /\w{3,8}?/i; console.log(pattern.exec(str)); //非贪婪模式:结果为['hel']