js正则表达式

1.语法:var regExp=/pattern/flags;

flags:g:全局模式;i:不区分大小写;m:多行匹配模式

2.举例:

regExp=/at/g:匹配所有含有"at"的实例;

regExp=/[bc]at/i:匹配第一个"bat"或"cat",不区分大小写;

regExp=/.at/gi;匹配所有以at结尾的不区分大小写的实例;

对于符号需要反斜杠转义:

regExp=/\[bc\]at/i:匹配第一个“ [bc]at”,不区分大小写;

regExp=/\.at/:匹配所有".at",不区分大小写;

3.regExp构造函数:接收两个参数:一个需要匹配的字符串模式,一个是可选的标志字符串。(可以使用字面量定义的任何表达式都可以使用构造函数来定义)

regExp=/[bc]at/i;

等同的构造函数表达:regExp=new RegExp("[bc]at","i");

/\[bc\]at/ = "\\[bc\\]at"

/name\/age/ = "name\\/age"

/\d.\d{1,2}/ = "\\d.\\d{1,2}"

/\w\\hello\\123/ = "/\\w\\\\hello\\\\123"

4.在ECMAScript3中,正则表达式字面量始终会共享一个RegExp实例,而是用构造函数创建的每一个新的RegExp实例都是一个新的实例。

5.RegExp实例属性:global(布尔值,是否设置了全局g标志),ignoreCase(布尔值,是否设置了i标志),lastIndex(整数,表示开始搜索下一个匹配的字符位置,从0算起),multiline(布尔值,表示是否设置了m标志),source(正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回)。

var regExp=/\[bc\]at/i = var regExp=new RegExp("\\[bc\\]at","i");

regExp.global;//false;

regExp.ignoreCase;//true

regExp.multiline;//false;

regExp.lastIndex;//0

regExp.source;//"\[bc]at/"

6.(...)代表捕获匹配;

var text="mom and dad and baby";

var pattern=/mom (and dad ( and baby)?)?/gi;

var matches=pattern.exec(text);

matches.index;//0

matches.input;//"mom and dad and baby"

matches[0];//"mom and dad and baby"

matches[1];//"and dad and baby"

matches[2];//"and baby"

解释:最内部捕获组:“and baby”;第二个捕获组:"and dad"或者"and dad and baby",字符串传入exec方法之后,发现了匹配项,index属性为0;第一项是匹配的整个字符串,第二项匹配第一个捕获组内容,第三个匹配第二个捕获组内容。

7.test方法:接收一个字符串参数,在模式匹配该参数时返回true,否则返回false;

var text="000-00-0000";

var pattern = /\d{3}-\d{2}-\d{4}/;

pattern.test(text);//true

toString方法&toLocalString()方法:返回正则表达式的字面量,与创建表达式的方法无关:

var pattern = new RegExp("\\[bc\\]at","gi");

pattern.toString();// /\[bc\]at/gi

pattern.toLocalString();// /\[bc\]at/gi

其他方法:regExp.exec;  

     regExp.test;  

     string.match;  

     string.replace;

     string.search;

     string.split;

8.RegExp 构造函数属性:

input==$_         最近一次要匹配的字符串(Opera未实现)

lastMatch == $&        最近一次的匹配项(Opera未实现)

lastParen == $+    最近一次匹配的捕获组(Opera未实现)

leftContext == $`    input字符串中lastMatch之前的文本

multiline == $*      布尔值,表示是否所有表达式都使用多行模式(IE 和 Opera未实现)

rightContext == $'    input字符串中lastMatch之后的文本

var text="this has been a short summer"

var pattern = /(.)hort/g

if(pattern.test(text)){

RegExp.input;== RegExp.$_            //this has been a short summer

RegExp.leftContext;== RegExp["$`"]      //this has been a

RegExp.rightContext;== RegExp["$'"]      //summer

RegExp.lastMatch;== RegExp["$&"]       //short

RegExp.lastParen;== RegExp["$+"]      //s

RegExp.mulitiline;== RegExp["$*"]      //false

}

 

pattern=/(..)or(.)/g

RegExp.$1 //sh

RegExp.$2 //t

 

9.模式的局限性

开始:^    结尾:$

s:单行匹配模式     x:无间隔匹配模式

(? : ...)?表示一个非捕获型分组,后缀?表示这个分组是可选的;

一个捕获型分组会复制它所匹配的文本,并把其放到result数组里,第一个捕获型分组的编号是1.。。

[...]表示一个字符类,连字符(-)表示范围XXX到XXX

后缀+表示这个字符类会被匹配一次或多次;

后缀{1,3}表示这个字符类会被匹配0次或者1~3次;

*表示这个字符类会被匹配0次或多次;

.会匹配除行结束符以外的所有字符;

 

 ===========================================================================================================补充:

\b:匹配一个单词的边界;\B:匹配一个单词的非边界;

\d:数字字符;\D:非数字字符;

\s:匹配一个空白字符;\S:非空白字符;

\n:换行符;\r:回车符;

\t:制表符;\v:垂直制表符;

\w:可以组成单词的字符;\W:不可以组成单词的字符

\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]

详见:http://www.jb51.net/article/43190.htm

http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

 

posted @ 2016-04-14 09:30  Decmber  阅读(683)  评论(0编辑  收藏  举报