量词
描述
使用
*
零次或任意次,相当于{0,}
不推荐使用,范围太广,不够精确。
?
零次或一次,相当于{0, 1}
/10?/g 对1进行全局搜索,包括其后紧跟的零个或1个'0'。
+
一次或任意次,相当于{1, }
/w+/g 对至少一个单词进行全局搜索。
{n}
正好n次
/d{4}/g 对包含四位数的数字进行全局搜索。
{n,}
至少n次,最多不限
/d{3,}/g 对包含至少三位数的数字进行全局搜索。
{n, m}
至少n次,最多m次
/d{3,4}/g 对包含三位或四位的数字进行全局搜索。
下面是一些常用的匹配模式:
模式
描述
使用
^a
任何开头为 a 的字符,表示行首
/^\d/ 以数字开头 /^a/g 全局搜索以'a'开头的字符
a$
任何结尾为 a 的字符,表示行尾
/\d$/ 以数字结尾 /z$/g 全局搜索以'z'结尾的字符
?=a
任何其后紧跟 a 的字符
/a(?= b)/g 全局搜索'a'后紧跟'b'的字符
?!a
任何其后没有紧跟 a 的字符
/c(?= d)/g 全局搜索'c'后没有紧跟'd'的字符
6、字符串和正则配合。
(1)、search()配合正则
实例:找出字符串中第一次出现数字的位置
<script> var str='asdf zxcvbnm'; //元字符\d,表示转义为数字 var re=https://www.jb51.net/\d/; alert(str.search(re)); //返回: 第一个数字为出现在第位 </script>
(2)、match()配合正则
其实没有什么东西是非正则不可的,只是正则可以让做东西更方便。下面就完成本章遗留的历史问题,怎么使用正则,能一句代码就完成普通方法需要很多行代码才能完成的东西。
在实例之前,先看看match()与正则的配合。
<script> var str='asdf zxcvm'; //找出字符串中的数字可以使用元字符\d var re=https://www.jb51.net/\d/; //没告诉系统要找多少数字,系统在找到数字后就返回 alert(str.match(re)); //返回: //因此需要全局匹配,使用修饰符g var re=https://www.jb51.net/\d/g; //没告诉系统要找几位,系统会将所有找到的数字返回 alert(str.match(re)); //返回:,,,,,,,,,,,, //所以可以使用两个元字符,告诉系统要找的数字是位 var re=https://www.jb51.net/\d\d/g; //显然这样是不可取的,因为数字的位数并不固定,可能是位,有可能还是多位 alert(str.match(re)); //返回:,,,, //所以需要用到量词+,+代表若干,也就是多少都可以。 var re=https://www.jb51.net/\d+/g; //现在返回正确。 alert(str.match(re)); //返回:,,,, </script>
实例:使用正则找出字符串中所有数字
<script> var str=' abc d aa c zz -=-=s-'; //alert(str.match(/\d+/g)); //元字符\d也可以使用[-]代替,到随便哪个都行。 alert(str.match(/[-]+/g)); //返回:,,,,,,, </script>
正则是强大的字符串匹配工具,就这样简单的使用一句代码就完成了。
(3)、replace()配合正则
<script> var str='abc zaaz deaxcaa'; //将字符串中的a替换为数字 alert(str.replace('a', )); //仅仅只将第一个a替换为 //配合正则使用匹配所有a再替换 var re=https://www.jb51.net/a/g; alert(str.replace(re, '')); //返回所有的a都为 </script>
实例:简单的敏感词过滤