三爪的JS奋斗史--正规表达式

正则表达式

 

RegExp 对象的构造函数可以带一个或两个参数。

第一个参数(或只有一个参数) 是描述需要进行匹配的模式字符串

如果还有第二个参数,这个参数则制定了额外的处理指令

 

最基本的正则表达式

 

Var reCat = new RegExp(“cat”);

 

如果要让这个正则表达式匹配所有出现的cat就需要给构造函数第二个参数:

 

Var reCat = new RegExp(“cat”,”g”);

 

在上面哪行代码中gglobal的缩写,表示要搜索字符中出现的全部 cat ,而不是在找到第一个匹配后就停止,

 

如果还要让模式不区分大小写,就可以给第二个参数添加字符 “i”

 

Var reCat = new RegExp(“cat”,”gi”);

 

Perl 风格的语法:

 

Var reCat = /cat/gi;

 

 

使用正则表达式

var a = "cat";

var cat = /cat/;

alert(cat.test(a)); return: true;

 

 

var a = "a bAt, a Cat, a cAt, a fat baT, a fat cat";

var cat = /at/gi;

var arratAt = a.match(cat); return: a字符串中的7at存到了arratAt中了

 

var a = "a bAt, a Cat, a cAt, a fat baT, a fat cat";

var cat = /at/gi;

alert(a.search(cat)); return:3 at第一次出现的位置

 

 var a = "This is one!";

 var one = /one/;

 alert(a.replace(one,"two")); return:This is two; 替换

 

 

字符类

简单类:

    var a = "a bAt, a Cat, a cAt, a fat baT, a fat cat";

      var b = /[bcf]at/gi;

      var c = a.match(b);

     alert(c); return: bAt, Cat, cAt, fat baT, fat cat

 

负向类:

    var a = "a bAt, a Cat, a cAt, a fat baT, a fat cat";

    var b = /[^cf]at/gi;

    var c = a.match(b);

 alert(c); return: bAt,baT

 

范围类:

var a = "num1,num2,num3,num4,num5,num6,num7";

     var b = /num[1-4]/gi;/*依然可以使用负向类*/

     var c = a.match(b);

     alert(c);

 

跳跃了。。。又回头写笔记了

 

.   除了换行与回车之外的任意字符

\d  数字

\D   非数字

\s   空白字符

\S   非空白字符

\w 单词字符(所有的字母 所有的数字和下划线)

\W 非单词字符

 

量词

  出现零次或一次

*    出现零次或多次

+    出现一次或多次

{N}   一定出现多少次

{n,m} 至少出现n次但不超过M

{n,} 至少出现N

 

 

 

 

 

贪婪的 惰性的 支配性的量词

贪婪   惰性    支配

      ??     +

*        *      *+

+        +      ++

 

解释下贪婪 惰性 支配

贪婪就是从第一个检查字符串是否相符合,不符就减去最后一个字符,在进行检查,直至匹配或字符串减完

 

惰性就是一个一个检查,第一个检查不符就读下一个字符,再匹配

 

支配..就是遇见不对的,就切掉切掉= =!!!切掉就结束了

 

分组

用“(   )”来进行分组

比如

 

Var reTag = /dogdog/g; 等于 var reTag = /(dog){2}/g;

也可以

Var re1 = /(dog)*/;   Var re1 = /(dog)?/;   Var re1 = /(dog)+/;

 

Var re4 = /([bd]ad?)*/;

 

 

Var reExtraSpace = /^\s*(.*?)\s*$/; 

return this.replace(reTag,"$1");

书中的 Var reExtraSpace = /^\s*(.*?)\s*$/; " this is a women" 时,无法对第一个空格进行删除

 

$1 是反向引用。

反向引用是遵循从左到右

A.123)))

B.23))

C.3

$1是第一个反向引用,$2依次排

 

Var reDogDog = /(Dog)\1/ 等于 var reDogDog = /DogDog /;

 

 

Var sA = “1234 5678”;

Var reB = /(\d{4}) (\d{4}))/;

Var c = sA.replace(reB,”$2 $1”);

Alert(c); ruturn: 5678 1234;

 

前瞻与候选的结合DEMO.关键字屏蔽就是用的它….我试了几次..不错捏!!

 

var sToMatch1 = "X , X";        

var reBed = /(X(?=|))/g;

var show = sToMatch1.replace(reBed,"**");

alert(show);

 

邪恶的DEMO

 

非捕获性分组: ?:

创建反向引用的分组 称为捕获性分组

非捕获性分组不会创建反向引用,因为在较长的表达式中,创建反向引用会降低匹配速度。

 

边界:^ 行开头 $行结尾

      \b单词的边界(中文无效) \B非单词的边界

 

多行模式:var reLastWordOnLine = /(\w+)$/gm;

 

实例

验证日期

var reDay = /?:0[1-9]|[12][0-9]|3[01]/;

var remonth = /?:0[1-9]|1[0-2]/;

var reYear = /?:19|20\d{2}/;

 

验证Email

var reEmail = /^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/;

posted @ 2009-11-16 20:58  三爪  阅读(153)  评论(0)    收藏  举报