《javascript高级程序设计》学习笔记(九):正则表达式

 正则表达式的用法十分复杂,完全可以用一本书来讲述。这里只记录一些简单的常用的用法。

1.js里面通过RegExp类来实现正则表达式的。

    var reCat = new RegExp("cat");     //匹配串中第一个"cat"
    var reCat = new RegExp("cat","g"); //匹配串中所有的"cat","g"是global的意思
    var reCat = new RegExp("cat","gi");  //匹配串中所有的"cat",不区分大消息,"i"是insensitive的缩写
    var reCat = /cat/gi;        //perl风格

2.RegExp的方法

    (1)test() 判断是否匹配,返回 true 或者 false
    var sTomatch ="cat";
    var reCat = /cat/;
    alert(reCat.test(sTomatch));//outputs true

    (2)exec() 返回一个数组,数组中的第一个条目是第一个匹配
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /at/;
    var arrMatches = reAt.exec(sTomatch);
    alert(arrMatches.toString()); //outputs 'at'

3.String对象对正则表达式的支持

    (1)match()方法
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches.toString()); //outputs 'at,at, At ,aT ,aT ,at';

    (2)replace()方法
    var sToChange = "this red paper is not very red";
    alert(sToChange.replace("red","blue"));//只替换第一个"red",outputs "this blue paper is not very red"

    要想全部替换,如下
    var sToChange = "this red paper is not very red";
    var reRed = /red/gi;
    alert(sToChange.replace(reRed,"blue"));

    (3)split()方法
    var sColor = "red,blue,yellow,green";
    var reCom = /\,/ ;  //因为","是正则表达式的元字符,所以用"\"来转义
    var arrColors = sColor.split(reCom);

    上面方法的效果等同于
    var sColor = "red,blue,yellow,green";
    var arrColors = sColor.split(",");

4.简单模式
    (1)元字符。
    正则表达式的所有元字符如下:
    ( [ { \ ^ $ | ) ? * + .
    任何正则表达式要使用元字符,都必须转义:
    var reTest = /\?/ ;
    或者:
    var reTest = new RegExp("\\?"); //注意:是两个反斜杠,为了避免js像处理 \n 一样处理 \? ,必须双重转义。
   
    如果删除字符串中的所有换行符,如下:
    var sNewStr = sOldStr.replace(/\n/g,"");
   
    (2)字符类:
    <1>.简单类 使用[abc] ,表示匹配中括号内的字符
    var reTest = /[abc]at/gi; //匹配串中'at'字符前是'a'或者'b'或者'c'
   
    例如:
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /[abc]at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'bat, Cat, baT, cat';
   
    <2>.负向类 使用[^abc],表示不匹配中括号内的字符
    var reTest = /[abc]at/gi; //匹配串中'at'字符前不是'a'不是'b'不是'c'
   
    例如:
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /[^abc]at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'fAt,faT';
   
    <3>.范围类 [a-z] ,表示匹配a到z范围之间的
    例如:
    var sTomatch = "num1,num2,num3,num4,num5";
    var reAt = /num[1-3]/g;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'num1,num2,num3';
   
    <4>.组合类 [a-z1-4\n] 标识匹配所有a~z,1~4 以及一个换行符
    例如:
    var sTomatch = "num1,numanuma,numb,num4,num5,num?num3numt,num9";
    var reAt = /num[1-3a-m\n]/g;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'num1,numa,numa,numb,num?,num3';
    <5>.预定义类 由于经常用到一些模式,正则表达式预定义了一些常用匹配:如下:
   
   
代码 等同于 匹配
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字
\D [^0-9] 非数字
\s [ \r\n\x0B\f\r] 空白字符
\S [^\r\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符(所有的字母、数字、下划线)
\W [^a-zA-Z_0-9] 非单词字符
   
    <6>.简单量词,如下表:
   
代码 描述
出现零次或一次
* 出现零次或多次(任意次)
+ 出现一次或多次(至少出现一次)
{n} 一定出现n次
{n,m} 至少出现n次,但不超过m次
{n,} 至少出现n次

    例如,想匹配单词bread,red或read:
    var reB = /b?rea?d/;


posted @ 2008-05-08 20:25  MichaelChen  阅读(346)  评论(0编辑  收藏  举报