引用类型之正则表达式
- 字面量格式:var expression=/pattern/flag
pattern: 可以为复杂的
正则表达式 ,flag有三种匹配方式:g,i,mglobal :
全局模式,对字符串从头到尾匹配,不会匹配到第一个就结束。case-insenstive : 匹配时
不分大小写multiline :
多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
var regex=/[a,b]c/g;
var str="acdddbc";
var r=regex.test(str);
console.log(r);
//打印结果
true
var regex=/ac/i;
var str="Acdddbc";
var r=regex.test(str);
console.log(r);
//打印结果
true
var regex=/ac/m;
var str="dddbc\ndac";
console.log("\n会使字符串换行:"+str);
var r=regex.test(str);
console.log(r);
//打印结果
会使字符串换行:dddbc
dac
true
- 以new的方式创建正则表达式:new
RegExp(pattern,mode),其中pattern为正则表达式字符串,mode为匹配模式:g,i,m.
var reg1 = /\[bc\]at/;
var reg2 = new RegExp("\\[bc\\]at");
var str1 = "[bc]atb";
console.log("reg1:"+reg1.test(str1));
console.log("reg2:"+reg2.test(str1));
//打印结果
reg1:true
reg2:true
注意:pattern字符串,在某些情况下对字符需要进行双重转义,一般认为需将每个"\"转换成"\\"。
- regExp的实例属性
实例分为:
global,ignoreCase,mutiline,lastIndex,source.
var reg2 = new RegExp("\\[bc\\]at","g");
//返回布尔值
console.log("global:"+reg2.global);
console.log("gnoreCase:"+reg2.ignoreCase);
console.log("multiline:"+reg2.multiline);
//返回正则表达式
console.log("source:"+reg2.source);
//打印结果
global:true
gnoreCase:false
multiline:false
source:\[bc\]at
- exec方法:regExp.exec(pattern)
pattern(正则表达式)里面用括号括起来的部分为一个分组
var reg = /^(18|19)\d+/;
var reg1 = /^(18|19)(\d+)/;
var str1="1819";
console.log("\\d+未加括号:");
console.log(reg.exec(str1));
console.log("\\d+加括号:");
console.log(reg1.exec(str1));
//打印结果
\d+未加括号:
[ '1819', '18', index: 0, input: '1819', groups: undefined ]
\d+加括号:
[ '1819', '18', '19', index: 0, input: '1819', groups: undefined ]
regExp.exec(pattern)返回的数组arr,arr[0]为整个正则表达式匹配到的字符串,而arr[1]~arr[n]为各个括号括起来的分组所匹配到的 字符串,input为要匹配到字符串。、
var reg1 = /^(18|19)(\d+)/;
var str1="1819";
var arr=reg1.exec(str1);
console.log("arr[0]: "+arr[0]);
console.log("arr[0]: "+arr[1]);
console.log("arr.input: "+arr.input);
//打印结果
arr[0]: 1819
arr[0]: 18
arr.input: 1819
注意:是str匹配regEXP,?取值是0个或者1个由str决定,当str有1个时就取值1个.