JS 中的正则表示式
String.prototype
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
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")
String replace 方法
正则的情况
$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
- })
来源: http://www.bubuko.com/infodetail-3014128.html