正则表达式基础知识整理

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'
/nameage/     'name\/age'
/d.d{1,2}/       '\d.\d{1,2}'
/whello\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()方法返回正则表达式本身;

原文地址:https://www.cnblogs.com/yangguoe/p/7979494.html