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