js中正则表达式相关的方法共有六个
字符串对象的方法4个:search()、match()、replace()、split()
1、search():返回下标
返回与正则表达式查找内容匹配的第一个字符串的位置。如果找到一个匹配,search方法将返回一个整数值(匹配字符的下标),如果没有找到匹配则返回-1。
var str = 'abd123tr12'
var pattern = /[\d]+/ //一般不用全局属性g
console.log(str.search(pattern))
//返回结果为:3
2、match():以数组的形式返回匹配的正则文本
检索字符串str,以找到一个或多个与正则表达式匹配的文本,若没有找到任何匹配的字符串,则返回null。
var str = 'abd123tr12'
var pattern = /[\d]+/g
console.log(str.match(pattern))
//返回结果为:['123','12']
3、split():返回划分后的数组
将一个字符串分割成子字符串,然后将结果作为字符串数组返回。
var str = 'Jenny,Max,Jason,Heliy'
var pattern = /,/
console.log(str.split(pattern))
//返回结果为:["Jenny", "Max", "Jason", "Heliy"]
4、replace():返回划分后的数组
将一个字符串分割成子字符串,然后将结果作为字符串数组返回。
var str = 'abd123tr12'
var pattern = /[\d]+/g
console.log(str.replace(pattern,'Jenny'))
//返回结果为:abdJennytrJenny
正则表达式对象的方法有2个:test()、exec()
1、test() :返回true/false
匹配字符串中是否存在与正则表达式相匹配的结果,如果存在则返回true,否则返回false。该方法常用于判断用户输入数据的合法性。
//验证邮箱的合法性
var string = '1053497171@qq.com';
var pattern= /^[a-zA-Z0-9\.\-\+\_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/
console.log(pattern.test(string))
//返回结果为:true
2、exec()
用于检索字符串中正则表达式的匹配。返回一个数组存放匹配结果,如果未找到则返回null。
exec()是一个稍微有点复杂的函数
最简单的用法,与字符串对象方法match()返回的数组相同
var str = 'I wanted to be the man that made you happy'
var pattern = /ma/
console.log(pattern.exec(str))
//返回结果:["ma", index: 19, input: "I wanted to be the man that made you happy"]
console.log(pattern.exec(str)[0]) //ma
console.log(pattern.exec(str).index) //9
console.log(pattern.exec(str).input) //I wanted to be the man that made you happy
exec()的返回值除了匹配到的数组外还有另外两个属性,index匹配文本的第一个字符串的位置,input被检索的字符串。
进阶用法:
var str = '我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999'
//设置正则表达式,匹配以13开头11位字符串,全局匹配 (这里是否全局匹配都不影响结果)
var reg = /13(\d)(\d{8})/g //13(\d)(\d{8})整个正则表达式 (\d)第一个子表达式 (\d{8})第二个子表达式
//执行exec()函数。数组的第0个元素是与整个正则表达式相匹配的文本,第一个元素是与reg的第一个子表达式相匹配的文本(如果存在的话),第二个元素是与第二个子表达式相匹配的文本,以此类推。。。
var arr = reg.exec(str)
console.log(arr)
//返回结果:["13522222222", "5", "22222222", index: 5, input: "我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999"]
//循环输出结果
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
//13522222222
//5
//22222222
}
高阶用法:
当正则的匹配模式是全局时,exec()的行为就稍稍复杂些。
var str = "Penny Leonard Sheldon Howard Leonard Penny Sheldon"
var patt = new RegExp("Leonard","g")
//patt会有一个lastIndex属性,指定开始检索的字符串位置,当exec()找到了匹配文本后,lastIndex会被设置为匹配文本的下一个字符的位置。当再也找不到匹配文本是exec()返回null,并且lastIndex被设置为0
var result
while ((result = patt.exec(str)) != null) {
console.log(result)
console.log(patt.lastIndex)
//["Leonard", index: 6, input: "Penny Leonard Sheldon Howard Leonard Penny Sheldon"]
//13
//["Leonard", index: 29, input: "Penny Leonard Sheldon Howard Leonard Penny Sheldon"]
//36
}