正则表达式基础知识整理
RexExp类型:
1.创建方式:
(1)字面量方式:
var expression=/pattern/flags;
pattern部分可以是任何简单或者复杂的正则表达式;
flags是3个标志:
a.g全局模式,即模式江北应用于所有的字符串,而非再发现第一个匹配项时候立即停止;
b.i不区分大小写;
c.m多行模式,在到达文本末尾时还会继续查找下一行中是否存在与模式匹配的项;
如:
/匹配以at结尾的3个字符的组合,不区分大小写
var pat=/.at/gi;
正则表达式中的元字符:如果想要皮牌字符串中包含元字符,都必须进行转义;
([{/^$|)?*+.]};
(2)RexExp构造函数方式:
var pat=new RexExp('要匹配的字符串模式','可选的标志字符串');由于RexExp构造函数的模式参数是字符串,所有的元字符应进行双重转义;
字面量模式 等价的字符串
/\[bc\]at/ '\\[bc\\]at'
/\.at/ '\\.at'
/name\age/ 'name\\/age'
/\d.\d{1,2}/ '\\d.\\d{1,2}'
/\w\hello\\123/ '\\w\\hello\\\\123'
使用正则表达式字面量和使用RexExp构造函数创建的的正则表达式不一样,正则表达式字面量时钟会共享同一个RexExp实例,而使用构造函数创建的每一个新的RexExp实例都是一个新实例;
如:
1 <script> 2 var rel=null; 3 for(var i=0;i<10;i++){ 4 re=/cat/g; 5 re.test('catastrophe'); 6 } 7 for(var i=0;i<10;i++) { 8 re = new RexExp('cat', 'g'); 9 re.test('catastrophe'); 10 } 11 </script>
第一个循环体中,只为RexExp只为/cat/创建了一个RexExp实例,由于实例属性不会重置,因为在循环中再次第哦啊用test()方法就会失败;因为第一次调用已经找到了cat,第二次调用是从索引3开始的,所以找不到了,由于测试到了字符串的末尾,所以下一次调用就从头开始了;
第二个循环体中美音为此迭代都会创建一个新的RexExp实例,因此每次调用test()都会返回true;
二,RexExp的实例属性:
global:
ignoreCase:
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起;
multiline:
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数的字符串模式返回;
1 <script> 2 var patten=/\[bc\]at/i; 3 alert(patten.global);//false 4 alert(patten.ignoreCase);//true; 5 alert(patten.multiline);//false 6 alert(patten.lastIndex);//0 7 alert(patten.source);//\[bc\]at 8 </script>
三,RexExp的实例方法:
1.exec('要应用模式的字符串');返回包含第一个匹配项信息的数组,或在没有匹配项的情况下返回null;返回的数组是Array的实例,包含两个额外属性:
index:表示匹配项在字符串中的位置;
inpt:表示应用正则表达式的字符串;
1 <script> 2 var text='mom and dad and baby'; 3 var pattern=/mom(and dad(and baby)?)?/gi; 4 var matches=pattern.exec(text); 5 console.log(matches.index);//0 6 console.log(matches.input);//mom and dad and baby 7 console.log(matches[0]);//mom 8 console.log(matches.input);//mom and dad and baby 9 </script>
2.test()方法:
接收一个字符串参数,在模式与该参数匹配的情况下返回true;
1 <script> 2 var text='000-00-0000'; 3 var pattern=/\d{3}-\d{2}-\d{4}/; 4 if(pattern.test(text)){ 5 alert('the pattern was matched'); 6 } 7 </script>
RexExp实例继承了toLoaclString()和toString()方法,都会返回正则表达式的字面量,与创建正则表达式的方式无关;
RexExp的valueOf()方法返回正则表达式本身;