JS的正则表达式
最近研究了下正则表达式,试着把学到的内容整理出来,希望对其它在学习的人有帮助。
在JS中,和正则表达式的使用有关的两个对象,分别是:RegExp和String
RegExp对应的方法是 test() 和 exec()
String对应的方法是 search(),replace(),match(),split()
首先介绍一下RegExp对象方法的用法
\/d\g.test("a1b2c3d4"); //全局搜索 ,每执行一次lastIndex的位置会改变,当找不到相应的值时返回false
例子:
<script> var letit = /\d/g; document.write("<p>"+letit.test("a1b2c3d4")+" lastIndex :"+letit.lastIndex+"</p>"); document.write("<p>"+letit.test("a1b2c3d4")+" lastIndex :"+letit.lastIndex+"</p>"); document.write("<p>"+letit.test("a1b2c3d4")+" lastIndex :"+letit.lastIndex+"</p>"); document.write("<p>"+letit.test("a1b2c3d4")+" lastIndex :"+letit.lastIndex+"</p>"); document.write("<p>"+letit.test("a1b2c3d4")+" lastIndex :"+letit.lastIndex+"</p>"); </script>
/[a-z](\d)/.exec("a1b2c3d4");// 这个方法会返回找到对应值的字符和想要分组(括号)的字符;
最典型的例子是获取时间对应的数字:
/(\d)(\d)(\:)(\d)(\d)(\:)(\d)(\d)/.exec(new Date());
输入内容为:
Sat Jan 20 2018 13:32:55 GMT+0800 (中国标准时间) //随便选定了个时间
获得的内容是:
"13:32:55", "1", "3", ":", "3", "2", ":", "5", "5"
接下来是String对象的方法
search方法会返回匹配的第一个字符的序号如
"a1b2c3d4".search(/\d/);
会返回1 ,search不执行全局搜索
replace方法用法如下:
"a1b2c3d4".replace(/\d/g,'x') -----》 "axbxcxdx"
"2017-11-12".replace(/(\d{4})-(\d{2})-(\d{2})/,function(match,group1,group2,group3,index,origin){return group2+","+group3+","+group1});----->"11,12,2017"
match方法
在非全局模式下与exec方法类似,只不过调用对象调换了。
new Date().match(/(\d)(\d)(\:)(\d)(\d)(\:)(\d)(\d)/);
全局模式只返已经分组的子表达式,也不指明位置。