当哥还推荐了一篇文章给我:
http://blog.sina.com.cn/s/blog_4acf752f0100omrt.html
(1)
test( )方法 和 exec( )方法一样,都是正在写在前面
var reg=new RegExp("abc"),alert(re.test("abcd")),这个时候会返回true。
(2)
var a=/^ab/; alert(a.test("bbs adad")),注意^表示整个字符串的开头,这里的“bbs adad”貌似第2段字符串是ab开头的,但仍然不行,只有“abbs adad”这样在整个字符串的开头才行。
(3)
\s,匹配空格字符,制表符,换页符等。
\w,字母,数字,下划线都可以匹配,相等于[a-zA-Z0-9_],别忘记下话划线。
\d,只匹配数字,效果等同于[0-9]
.号可以匹配任何的东西,除了换行符,如果要匹配点号自己可以用\.进行转义,也可以直接用点号自己匹配自己。
var re=/^.$/,re.test("\n")返回为false,也即是换行符没法匹配,会返回假。
(4)
exec( )和正则中的“()”有很好的配合。
var a=/(\w+)\s+(\d+)/;
var f=a.exec("b d1"); // 返回null,这里是个整体匹配。。
var f=a.exec("b 1"); // 正确
alert(f) // 结果是b 1,b,1,即结果是一个数组,值分别是全部匹配到的,以及各个组合依次匹配到的。
f[0]的值是“b 1”,f[1]的值是b,f[2]的值是1。
(5)
var patt=/-+/; // 匹配“-”号至少一次
var a="---sadsa----";
var b=a.replace(patt,"@"); // 结果是@sadsa---
我们可以看到patt可以匹配到"---sadsa----"中前面的“---”,后面的匹配不到,然后将它们替换成为@,于是变成@sadsa---,我一开始还以为会是@@@@sadsa---。
改成:var patt=/-+/g
结果是@sadsa@,g的意思就是全文查找,匹配成功了一次,还会继续匹配。
改成:var patt=/-/g
结果是@@@sadsa@@@
(6)
exec()方法和match()方法的异同
两者都可以返回数组。但如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。也即exec( )返回数组的情形,是因为正则式子里头有分组的写法。
下面两个alert函数弹出的信息是一样的 :
var str= "cat,hat" ;
var p=/at/; //没有g属性
alert(p.exec(str))
alert(str.match(p))
都是"at"。在这种场合下exec等价于match。
但是如果正则表达式是全局匹配(g属性)的,那么以上代码结果不一样了:
var str= "cat,hat" ;
var p=/at/g; //注意g属性
alert(p.exec(str))
alert(str.match(p))
结果分别是:
"at"
"at,at"。
var patt=/s/g; var a="ssadsa"; var b=patt.exec(a); //结果是s,而不会返回ss,即使有g,虽然进行了全文查找,但是永远只返回第一次匹配成功的。除非改成 var patt=/s+/g,这样的话第一次匹配就匹配到2个s,于是能返回ss。
(7)
去除两边空白字符,不能/\s+/g,因为这样可能把字符串中间的空白也去掉啦,所以只能操作两次,一次替换头部,一次替换尾巴。头部:/^\s+/,尾巴:/\s+$/。
(8)
让用户输入1982-08-23这样的格式,用户可能会输入19934#¥·08!2,这样的形式,这时候只要利用split()和正则就可以顺利将字符串劈开,取到我们要的值。
如:string.split(/[^0-9]+/),注意不需要引号,正则外围任何时候都不需要引号。
(9)
search(/\d+/)方法是用来返回查找的字符索引的,功能和indexOf()类似,但后者不可以用正则。search加上g也是没有意义的,因为只返回第一次查找字符的索引。
a.indexOf("f",3),后面这个是指定的查找起始位置。
(10)
test和exec都是正则的方法,replace,split,search,match,这些都是String和正则搭配方法。
(11)
var s="8dsad8dsaas888";
re=/\d+/g;
re.lastIndex=9;
alert(re.exec(s)); // 本来结果是8,后来设置了lastIndex为9,则是从第10个位置开始查找,于是会匹配到888,这个re.lastIndex的作用就是设置匹配的起始位置。
(12)
加了*,+这些量词后,都会尽量匹配多个,但是点号不是量词,它是代表一个任意字符而已。所以遇到点号,也是匹配成功就返回,不会像前两者一样尽量匹配多,除非加上 .* 即点号和星号。。
(13)
/abc/并不能只匹配到abc,可能匹配到fabcm,而如果我们只要匹配一个abc的话,则/^abc$/,这样的话就只匹配abc本身。
(14)
/\d{1,}/,这个是至少要匹配一位,等同于/\d+/。
(15)
量词后面,加问号,变成懒惰模式,如,var s="8899"; re=/\d+/g,没加问号的结果是8899,而加了问号的结果是8,尽量匹配就好乐。
var s="8899";
re=/\d*?/g; // 本来星号就是0次或者1次,这里加了问号变成懒惰后,它干脆直接不匹配啦,返回一个空值。
(16)
re=/if|else/,这个要么匹配if,要么匹配else。注意中间的 “|”符号。
re=/(if|emse)\d/,这里匹配if8这样的或者“emse9”这样的。\
(17)
/\da{3}/,注意这个{3}仅对a字母起作用,而非对\da起作用。靠得最近的才行。
(18)
var re=/(\d{3})@(\d{3})/;
var s="123@563";
var a=re.exec(s);
alert(a);
//这里貌似分组括号没有什么特别的意义,但是它却方便我们提取123和563,因为a[1],a[2]分别是它们的值。注意“-”这个符号,匹配的时候要进行转义。