javascript正则表达式详解(中级篇)

javascript正则表达式详解

在基础篇中我们已经讲解了如何来使用正则表达式等一些基础知识,这里我们要讲解的是正则表达式中的模式匹配,它们能帮助我们更好更快的写出漂亮的正则表达式,当然它们也是基础的知识,更高端正则表达式的需要自己在深入的研究!下面对模式的分类是我自己为其命的名,目的只是能更快更准的记住这些模式。

快捷匹配元字符:

.  点元素:表示匹配一个且必须一个任意字符;(换行符\n除外)

\s 表示匹配一个空格字符

\S 非\s

\d 表示匹配0-9中的任意一个数字

\D 非\d

\w 表示匹配一个数字或者字符或则下划线

\W 非\w

\b 边界匹配

\B 非\b

这些是最基础最常用的一些快捷的匹配方式

重复(区间)匹配元字符:

x* 表示匹配0个或者一个或者多个x

x+ 表示匹配1个或者多个x

x? 表示匹配0个或者1个x

x{m,n} 表示匹配至少m个最多n个x,其中包括了m和n

x{m} 表示精确的匹配m个x

x{m,} 表示匹配m个或者多于m个x

我想大家看到这里已经觉得自己能写出漂亮的正则表达式了,我们来试一试

var regExp = /\d*/;表示匹配0个或者一个或者多个数字

var regExp = /.+/;表示匹配任意字符一次或者多次;是的你已经能写出一些漂亮的正则表达式了,我们还要更上一层楼,继续往下学习;

集合匹配:

[a-z] 表示匹配小写字符a到z,其中包括了a和z

[a-z0-9] 表示匹配a-z和0-9;这种形式的为集合的复合式的写法

[^a-z] 表示非a-z中的任意一个字符

分组匹配:

(google) 将Google看为一组也就是一个整体;

分组中有一个很有意思的功能,它匹配到的第一组结果保存在RegExp.$1中依次类推RegExp.$2....;

例子:

var regExp = /8(google)+8/;

var str = "8googlegoogle8";

var arr = regExp.exec(str);

alert(RegExp.$1); 此处将会弹出google;

逻辑匹配:

| 表示或匹配;如:var regExp = /a|b/;表示匹配a或者b;

限定匹配:

^ 行首匹配,该符号必须写在第一个/的后面;

$ 行尾匹配,该字符必须写在最后一个/的前面;

例子:

var regExp = /\d?google/; 表示在google的前面必须要有0个或者1个数字

var str = "6666google";

var bool = regExp.test(str); 大家很可能会认为这个会返回false,因为Google的前面已经超过了一个数字,但是它会返回true,因为它可以从最后一个6开始匹配,如果var regExp = /^\dgoogle/;这样写,那么上面的例子则会返回false,因为它限定了从行首开始匹配;行尾匹配和上面的例子类似,就不在费笔墨了。


有了上面的快捷匹配,重复匹配,集合匹配,分组匹配,逻辑匹配,限定匹配我想绝大部分的运用正则表达式的知识你都能搞定了,然后加上项目的真正的练习我相信我们能更好!

项目经验:

在用exec时我相信大家都很容易犯一个书写的错误,因为我在项目中有过经验教训,这里分享给大家;

function regExec(str){

   var regExp = /8google*8/ig;

   var arr = regExp.exec(str);

   if(arr.length > 0){....} //如果匹配到的结果集数组长度大于0然后执行代码

};

这种写法的致命之处在于当没有匹配到时,arr为null,null没有length属性,所以在if中运用null.length将报错;

正确的写法是:

if(arr){.....};如果不是null,任何对象将转换为true,而是null时则会转换为false;



















郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。