js 正则表达式

js正则的两种创建语法:

//第一种
var reg = new RegExp("a");

//第二种
var pattern = /a/;

第一种方式可以传入两个参数,其中第一个是匹配字符串,第二个参数是一个可选项标志,有以下几个参数可选:

1.i(表示忽略匹配的字母大小写)

2.g(表示匹配全局)

3.m(表示多行匹配)

如:

//以第一种方式创建正则表达式
var reg = new RegExp("a","i");//以忽略字母大小写的形式进行匹配
var reg = new RegExp("a","g");//以查找全局的形式进行匹配
var reg = new RegExp("a","m");//以多行查找的形式进行匹配

//以第二种方式创建正则表达式
var pattern = /a/i;//作用跟上面的第一句相同,以下类似
var pattern = /a/g;
var pattern = /a/m;

ps:第二个可选项标识可以组合使用。

 

正则表达式的相关属性以及方法的使用

相关属性:

1.source:返回正则表达式模式的文本

var pattern = /a/;
console.log(pattern.source);//"a"

 

2.lastIndex:返回下次匹配成功的字符或字符串起始位置

var pattern = /a/g;
var string = 'abcdabcdabcd';

console.log(pattern.lastIndex); // lastIndex为0
pattern.test(string);
console.log(pattern.lastIndex); // lastIndex为1,即为下一匹配成功(指匹配第二个a)的起始位置
pattern.test(string);
console.log(pattern.lastIndex); // lastIndex为5,即为下一匹配成功(指匹配第三个a)的起始位置
pattern.test(string);
console.log(pattern.lastIndex); // lastIndex为9,即为下一匹配成功的起始位置,是匹配完第三个a后的位置
pattern.test(string);
console.log(pattern.lastIndex);//lastIndex为0,由于匹配不成功,lastIndex的值被置为0

 

3.input:返回能够匹配的最近一次字符串

var pattern = /a/;
var str = 'abcdca';
pattern.test(str);
console.log(RegExp.input); // 'abcdca'
var str1 = 'abc';
pattern.test(str1);
console.log(RegExp.input); // 'abc'
var str2 = 'b';
pattern.test(str2);
console.log(RegExp.input); // 'abc',因为传入的字符串匹配不成功

 

4.lastMatch:返回的是最后一次匹配字符串的字符或字符串

var str = 'abcad';
var pattern = /a/;
pattern.test(str);
console.log(RegExp.lastMatch); //'a'

 

5.lastParen:返回的是最后一次匹配的分组

var str = 'abcad';
var pattern = /ab/g;
pattern.test(str);
console.log(RegExp.lastMatch); //'ab'

 

6.leftContext:返回的是从字符串起始位置到匹配子字符串位置之前的子字符串

var str = 'bcacd';
var pattern = /a/;
pattern.test(str);
console.log(RegExp.leftContext); //'bc'

 

7.rightContext:返回的是从匹配子字符串位置后一位到字符串末尾

var str = 'bcacd';
var pattern = /a/;
pattern.test(str);
console.log(RegExp.rightContext); //'cd'

 

RegExp对象的相关方法:

1.exec() 此方法用于查找的字符串中相关字符,返回的是捕获分组所构成的数组

var str = 'abcda';
var pattern = /a/;
pattern.exec(str); // ["a"]
var pattern = /^[a-z]+(c)[a-z]+$/;
pattern.exec(str);// ["abcda", "c"]//第一个匹配元素是整个字符串,第二个则是(c)所捕获到的分组

 

2.test() 此方法用于当正则表达式与字符串能够匹配成功时返回true

var str = 'bcacd';
var pattern = /b/;
pattern.test(str);//true
var pattern = /e/;
pattern.test(str);//false

  

string对象的相关方法:

1.match() 此方法用于返回正则表达式匹配到的子字符或者子字符串

var string = 'abcda';
var pattern = /a/;
string.match(pattern);//["a"]
var pattern = /a/g;
string.match(pattern);//["a","a"]

 

2.search() 此方法用于查找正则表达式所匹配到的字符或者字符串的位置,如果有多个匹配项,则只返回第一个匹配项的位置

var s = 'abcda';
var p = /a/;
s.search(p);//0
var p = /a/g;
s.search(p);//0

 

3.replace() 此方法用于替换字符串中指定的字符或者字符串,两个参数:要替换的字符串或者字符(可以是一个查找的正则表达式),替换字符串

var s = 'abcda';
var p = /a/g;
s.replace(p,"@");//'@bcd@',第一个参数可以是正则表达式
s.replace("@","a");//'abcda',第一个参数可以是字符串

 

4.split() 此方法用于将字符串用指定的字符分割成数组并返回

var s1 = 'abc';
s.split("");//["a","b","c"]
var s2 = '123a456';
s.split(/[a-z]+/);//["123","456"]

 

遇到元字符需转义

js正则表达式中的元字符有:( [ { \ ^ $ | ) ? * + .  当要用到这些字符时要在前面加“ \ "

 

js正则表达式的一些预定义的特殊字符

字符      描述


\n      换行符 
\r      回车符 
\t      制表符 
\f      换页符 
\cX       与X对应的控制字符 
\b      退格符(BackSpace) 
\v      垂直制表符 
\0      空字符("")  


 

js正则表达式的一些预定义类


\d    [0-9]               匹配数字 
\D    [^0-9]              匹配非数字字符 
\s    [ \n\r\t\f\x0B]        匹配一个空白字符 
\S    [^ \n\r\t\f\x0B]       匹配一个非空白字符 
\w    [a-zA-Z0-9_]          匹配字母数字和下划线 
\W    [^a-zA-Z0-9_]         匹配除字母数字下划线之外的字符 


 

js正则表达式的量词


 

*     表示前面紧跟着的字符至少有0个或者多个 

+    表示前面紧跟着的字符至少有1个或者多个 

?    表示前面紧跟着的字符只有0个或者1个

{n}       表示前面紧跟着的字符有n个

{n,m}   表示前面紧跟着的字符在n和m个之间

{n,}      表示前面紧跟着的字符至少有n个


 

 

js正则表达式的贪婪量词与惰性量词,捕获与非捕获组,正向前瞻

1)在使用正则匹配字符串时,一般地,当要匹配的字符串为'aaabbbccc',/a+/匹配的是aaa,此为贪婪量词(即想要匹配更多的字符),而通过在"+"号后面加上"?"可变为惰性量词,此时只匹配字符串中的第一个a

2)一般地,当我们在正则表达式中加上一个括号时表示括号里的内容为要捕获的分组,比如:/^[a-zA-Z]+(\d+)$/,如果在括号里的内容前面加上"?:"时则表示此分组为非捕获组,即在最后返回的数组中不存在这个分组

3)关于捕获组,在正则表达式中通过RegExp访问$1,$2,$3....$9,可以获取第一个,第二个...第九个捕获组的内容

4)捕获出现在特定字符之前的字符,只有当字符后面跟着某个特定字符才去捕获它,相应的就有负向前瞻,表示当字符后面不跟着特定字符才去捕获它,正向前瞻在要指定的字符前加上"?=",负向前瞻则是加上"?!"

posted @ 2016-04-15 20:00  Duooi  阅读(390)  评论(0)    收藏  举报