tring.prototype 方法的正则有 match,search
match 返回匹配的项,search 返回匹配的第一个索引如下:
var reg = /[a-z]\d/; var str = "q1d2"; console.log(str.match(reg))// 结果是 [q1] console.log(str.search(reg))// 结果是0
如果是 /g
var reg = /[a-z]\d/g; var str = "q1d2"; console.log(str.match(reg))// 结果是 [q1,d2] console.log(str.search(reg))// 结果是0
String 的方法不会返回子匹配的项,而RegExp的 exec 方法会返回子匹配项,如:
var reg = /[a-z](\d)/g; var str = "q1d2"; console.log(str.match(reg))// 结果是 仍然是[q1,d2] console.log(str.search(reg))// 结果是0
RegExp.prototype 有两个正则方法, test,和exec
test 表示是否匹配上了true|false
exec 返回匹配的项的数数组 result result[0]是匹配项,result[1]..依次是子匹配项
例子:
var reg = /[a-z]\d/; var str = "q1d2"; console.log(reg.exec(str)); //结果是 [q1,1] console.log(reg.test(str)); //true
在全局匹配的时候exec连续执行得到全部的匹配项和子匹配项,例子:
var reg = /[a-z]\d/g; var str = "q1d2"; console.log(reg.exec(str)); //结果是 [q1,1] console.log(reg.exec(str)); //结果是 [d2,2]
RegExp.prototype.lastIndex 初始为0,只有当为全局匹配时才生效 ,被设置为紧随最近一次成功匹配的下一个位置,匹配为空后会重置为0
var reg = /[a-z]\d/; reg.test("111d1") reg.lastIndex//0 var reg = /[a-z]\d/g; reg.test("111d1") reg.lastIndex//5
es6新出的 y 标识 RegExp.prototype.sticky为true 和lastIndex 配合使用
表示一定要从 lastIndex开始匹配,
var reg = /[a-z]\d/y; reg.lastIndex = 2; reg.test("sssss1") // false reg.test("sssss1")
正则的情况
$1-9表示子匹配项的值
"ss1dd1".replace(/([a-z])(\d)/g,"$2"+"ff"+"$1");
repalce 传入function 参数分别为,匹配项,子匹配项,index,str
返回要替换的内容
"ss1dd1".replace(/([a-z])(\d)/g,function(matcher,$1,$2,index,str){
console.log(matcher,$1,$2,index,str)
return 22
})
原文:https://www.cnblogs.com/chillaxyw/p/10663482.html