【Js】正则表达式
什么是正则表达式
正则表达式是就是一套规则。用这规则去判断是否是邮箱,是否是电话号码等。
正则是一个对象:它有属性和方法。
正则是匹配所需字符串的强大工具。
正则写法
var rRe = new RegExp('字符串', '可选模式')
var rRe = /字符串/可选模式
可选模式有
i (ignoreCase 忽略大小写) 作用:忽略大小写
g (global 全局) 作用:匹配全部
m (muliti-line 多行) 作用:匹配多行
正则基础标识符
方括号[]:
[] (任意一个) var re1= /[abc]/; 匹配a,b,c中的任意一个。
[^] (除了) var re2 = /[^iso]/; 匹配除了 i,s,o的任意字符。
[0-9] (到、之间) var re3 = /[a-z0-9]/; 匹配 a到z和0到9中的任意一个。
(abc|xde|seo) (或) var re4 = /(abc|xde|seo)/; 匹配 abc 或 xde 或 seo。
量词(重复次数):
{n} (刚好n次)
{n,} (最少n次) var re1 = /[a-z]{2}/; 最少匹配2个字母,最多不限。
{n,m} (最少n次,最多m次)
+ (若干次) var re3 = /[0-9]+/; 若干个数字 等价于{1,} 最少一次
?(0次或者一次) var re4 = /a[0-9]?b/; 匹配a(0个数字)b或者 a(1个数字)b 等价于{0,1}
元字符(转义字符):
\d (digit数字) var re1 = /\d\d/; 匹配2个数字
\w (字母,数字和下划线) var re2 = /\w+/; 匹配若干个字符
\s (space 空白符)
\D (\d的反义) var re3 = /\D/; 匹配非数字
\W (\w的反义)
\S (\s的反义)
String对象的方法和正则的配合
search方法:
1 var rRe = /\d[ab]/g; //匹配一个数字+a或b 如 2b 0a 2 var rRe1 = /\d{3}/g; //匹配3个数字 3 var str = '铅笔是a2b,写出02a'; 4 var result = str.search(rRe); //search返回匹配的第一个元素的位置,后面不管 5 var result1 = str.search(rRe1); //如果没匹配到则返回-1 6 console.log(result); //结果 4; 7 console.log(result1); //结果 -1;
replace方法:
1 var rRe = /[abc2]/ig; //ig 忽略大小写和全部匹配 2 var str = 'iisocrazC123'; //大小C 3 var result = str.replace(rRe, '*') 4 console.log(result); //结果: iiso*r*z*1*3
match方法:
1 var rRe = /\d+/g; //匹配若干个数字 2 var str = 'abc e123 02s a3a'; 3 var result = str.match(rRe); //match把符合的元素 组成一个数组 4 console.log(result); //结果 ["123", "02", "3"]
split方法:
1 var rRe = /\|{2}/g; //匹配|| 2 var str = 'abc||e123||02s||a3a'; 3 var result = str.split(rRe, '3'); //split把字符串分隔成数组 2是定义数组长度 4 console.log(result); //结果 ["abc", "e123", "02s"]
正则对象自己的属性和方法
属性:global, ignoreCase, mulitiline
1 var rRe = /[^8]\d{6,7}/gm; 2 rRe.global? console.log('有g') : console.log('无g') 3 rRe.ignoreCase? console.log('有i') : console.log('无i') 4 rRe.multiline? console.log('有m') : console.log('无m') 5 //结果: 有g无i有m
属性:lastIndex, source
1 // lastIndex: 在全部匹配下(g) 记录test()或exec()匹配的最后位置 2 // source: 正则所匹配的源(在匹配什么) 3 var str = "The rain in Spain stays mainly in the plain"; 4 var rRe =/ain/g; 5 for(i = 0; i < 3; i++){//匹配3次 6 rRe.test(str) 7 document.write("ain第"+i+"次的位置: " + rRe.lastIndex +', '); //输出每次匹配的最后位置 8 // 结果:ain第0次的位置:8, ain第1次的位置:17, ain第2次的位置:28,} 9 } 10 console.log(rRe.source); //结果ain
test方法:
1 var str = "The rain in Spain"; 2 var rRe =/ain/g; 3 var rRe1 = /01/g; 4 var result = rRe.test(str); //检测字符串中是否有匹配 5 var result1 = rRe1.test(str); //检测字符串中是否有匹配 6 console.log(result); //结果: true 7 console.log(result1); //结果: flase
exec方法:
1 var str = "The rain in Spain"; 2 var rRe =/ain/g; 3 var result = rRe.exec(str); //检测字符串中是否有匹配,找到返回值,并确定位置 4 console.log(result); //结果: ["ain"] 5 console.log(rRe.lastIndex); //结果: 8