JavaScript正则表达式

来源:互联网 发布:mac os大小 编辑:程序博客网 时间:2024/06/03 12:29

模式修饰符

i   忽略大小写g   全局匹配m   多行匹配

正则表达式方法

test

alert(/Box/i.test('box'));          //true  写法一var pattem = new RegExp('Box','i');var str = 'box';alert(pattern.test(str));           //true  写法二

exec

有就显示数组(只匹配第一个),没有就返回null

var pattem = /Box/i;                //忽略大小写var str = 'box';alert(pattern.exec(str));           //box

test&exec

开启全局匹配时,索引位置不会重置

var pattern = /box/ig;var str = 'This is a Box!That is a box!';alert(pattern.test(str));           //truealert(pattern.lastIndex);           //13alert(pattern.exec(str));           //boxalert(pattern.lastIndex);           //27

String对象的正则表达式方法

match

返回子串或null

var pattern = /Box/i;                       //忽略大小写var str = 'This is a Box!That is a box!';alert(str.match(pattern));                  //Box   匹配到第一个字符串,返回数组var pattern = /Box/ig;                      //全局匹配忽略大小写var str = 'This is a Box!That is a box!';alert(str.match(pattern));                  //Box,box   匹配所有字符串,返回数组

返回第一个匹配的位置,从0开始计数,匹配不到返回-1

var pattern = /box/;var str = 'This is a Box!That is a box!';alert(str.search(pattern));                 //24var pattern = /box/i;                       //忽略大小写var str = 'This is a Box!That is a box!';alert(str.search(pattern));                 //10var pattern = /xox/;var str = 'This is a Box!That is a box!';alert(str.search(pattern));                 //-1    匹配不到

replace

返回替换后的字符串

var pattern = /Box/;var str = 'This is a Box!That is a box!';alert(str.replace(pattern,'Tom'));          //This is a Tom!That is a box!var pattern = /Box/ig;                      //全局匹配忽略大小写var str = 'This is a Box!That is a box!';alert(str.replace(pattern,'Tom'));          //This is a Tom!That is a Tom!

split

返回分割后的数组,默认全局匹配,匹配不到则返回原字符串

var pattern = /!/;                          //匹配感叹号var str = 'This is a Box!That is a box!';alert(str.split(pattern));                  //This is a Box,That is a box,alert(str.split(pattern).length);           //3var pattern = / /;                          //匹配空格var str = 'This is a Box!That is a box!';alert(str.split(pattern));                  //This,is,a,Box!That,is,a,box!alert(str.split(pattern).length);           //7

RegExp对象的静态属性

早期浏览器有差别,不常用
疑问:lastMatch等,全局时,是最后一次匹配的第一个匹配项,还是最后一个匹配项?

input($_)

存储当前被匹配的字符串

var pattern = /Box/;var str = 'This is a Box!That is a box!';alert(RegExp.input);                        //初始为空字符串pattern.test(str);                          //使用一下正则alert(RegExp.input);                        //This is a Box!That is a box!//alert(RegExp['$_'])                      //其他写法,其他静态属性都有自己的短名//alert(RegExp.$_)                         //其他写法,只有input可以这么写

leftContext($`)

最后一次匹配时,第一个匹配到的字符串的前子串

var pattern = /box/ig;                      //全局匹配忽略大小写var str = 'This is a Box!That is a box!';pattern.test(str);alert(RegExp.leftContext);                  //This is a var pattern = /box/g;                       //全局匹配var str = 'This is a Box!That is a box!';pattern.test(str);alert(RegExp.leftContext);                  //This is a Box!That is a 

rightContext($’)

最后一次匹配时,第一个匹配到的字符串的后子串

var pattern = /box/ig;var str = 'This is a Box!That is a box a box!';pattern.test(str);alert(RegExp.rightContext);                 //!That is a box a box!

lastMatch($&)

最后一次匹配时,第一个匹配到的字符串

var pattern = /box/ig;var str = 'This is a Box!That is a box a box!';pattern.test(str);alert(RegExp.lastMatch);                    //Box

lastParen($+)

最后一对圆括号内的匹配子串

multiline($*)

用于指定是否所有的表达式都用于多行的布尔值

RegExp对象的实例属性

早期浏览器有差别,不常用

global

Boolean值,表示g是否已设置

var pattern = /box/g;alert(pattern.global);      //truevar pattern = /box/;alert(pattern.global);      //false

ignoreCase

Boolean值,表示i是否已设置

var pattern = /box/i;alert(pattern.ignoreCase);      //truevar pattern = /box/;alert(pattern.ignoreCase);      //false

multiline

Boolean值,表示m是否已设置

var pattern = /box/m;alert(pattern.multiline);       //truevar pattern = /box/;alert(pattern.multiline);       //false

source

正则表达式的源字符串形式

var pattern = /box/g;alert(pattern.source);          //box

lastIndex

整数,代表下次匹配将从哪里字符串位置开始

元字符

反斜杠后的元字符将失去其特殊含义,匹配特殊字符必须加反斜杠

元字符

.               匹配除换行符意外的任意字符[A-Z]           匹配一个大写字母[a-z]           匹配一个小写字母[0-9]           匹配一个数字[a-zA-Z0-9]     匹配一个大小写字母或数字[^0-9]          匹配一个非数字[^a-z0-9]       匹配任意一个不在括号中的字符集中的字符\d              匹配数字\D              匹配非数字,同[^0-9]\w              匹配字母和数字及_\W              匹配非(字母和数字及_)

空白字符

\0              匹配null字符\b              匹配单词边界,不匹配字符\f              匹配进制字符\n              匹配换行符\r              匹配回车字符\t              匹配制表符\s              匹配空白字符、空格、制表符、换行符\S              匹配非空白字符

重复字符

?               匹配0个或1个*               匹配0个或任意多个+               匹配至少一个{m}             匹配m个{m,}            匹配m个,或m个以上{m,n}           匹配最少m个,最多n个

锚字符

^               行首匹配$              行尾匹配\A              只有匹配字符串开始处\b              匹配单词边界,词在[]内无效\B              匹配非单词边界\G              匹配当前搜索的开始位置\Z              匹配字符串结束处或行尾\z              只匹配字符串结束处

或’|’

aa|bb|cc        匹配aa或bb或cc中任意一个

分组,小括号()

(string)        括号内为一个整体例:var pattern = /8(.*)8(.*)6/;pattern.test('This is a 8google81236');alert(RegExp.$1);      //google    获取模式中第一个分组对应的匹配字符串alert(RegExp.$2);//123获取模式中第二个分组对应的匹配字符串,$几表示第几个分组例:在不清楚获取的字符串是啥时对其进行加粗var pattern = /8(.*)8/;var str = 'This is a 8google8';     //var str = 'This is a 8soso8';document.write(str.replace(pattern, '<strong>$1</strong>'));例:交换位置var pattern = /(.*)\s(.*)/;var str = 'google baidu';alert(str.replace(pattern, '$2 $1'));//baidu google

贪婪和惰性

在重复字符后加?,会变成惰性匹配

var pattern = /[a-z]+/;             //贪婪var str = 'abcdefg';alert(str.replace(pattern, '1'));   //1var pattern = /[a-z]+?/;            //惰性var str = 'abcdefg';alert(str.replace(pattern, '1'));   //1bcdefgvar pattern = /8(.*)8/;             //贪婪var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google8 8google8 8google</strong>var pattern = /8(.*?)8/;                //惰性var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google</strong> 8google8 8google8var pattern = /8(.*?)8/g;               //惰性,开启全局。//var pattern = /8([^8]*)8/g            //另一种惰性写法var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google</strong> <strong>google</strong> <strong>google</strong>

捕获性分组和非捕获组?:

var pattern = /([a-z]+)\s([0-9]{4}$)/; //捕获性分组,括号匹配的字符串会捕获到数组var str = 'google 2012';var a = pattern.exec(str);          //返回长度3的数组alert(a[0]);                        //google 2012   匹配到的字符串alert(a[1]);                        //google        第一个分组括号的字符串alert(a[2]);                        //2012          第二个分组括号的字符串var pattern = /(?:[a-z]+)\s([0-9]{4}$)/;   //不想捕获到数组,就在括号内最开始加?:var str = 'google 2012';alert(pattern.exec(str));                   //google 2012,2012

非捕获组?=、?<=

肯定式向前查找?=、肯定式向后查找?<=(这个试不成功)

var pattern = /goo(?=gle)/;     //goo后面必须跟gle//等价于var pattern = /(?=google)goo/;var str = 'google';alert(pattern.exec(str));       //goovar pattern = /goo(?=gle)/;     //goo后面必须跟glevar str = 'googee';             //goo后面没有glealert(pattern.exec(str));       //null

非捕获组?!、?

var pattern = /goo(?!gee)/;     //goo后面不能跟geevar str = 'google';             //goo后面是glealert(pattern.exec(str));       //goovar pattern = /goo(?!gee)/;     //goo后面不能跟geevar str = 'googee';             //goo后面是geealert(pattern.exec(str));       //null

数组嵌套分组

var pattern = /(a?(b?(c?)))/;var str = 'abc';alert(pattern.exec(str));       //abc,abc,bc,c

换行模式

var pattern = /\d+/;var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#'));    //#.baidu\n2.google\n3.bingvar pattern = /\d+/g;               //开启全局var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#'));    //#.baidu\n#.google\n#.bingvar pattern = /^\d+/g;              //开启全局,限定开始位置var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#'));    //#.baidu\n2.google\n3.bingvar pattern = /^\d+/gm;             //开启全局,多行模式,限定开始位置var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#'));    //#.baidu\n#.google\n#.bing