六、正则表达式 之 其他捕获方法 ------ 2019-10-21

1、test也能捕获(本意是匹配)

let str = "{0}年{1}月{2}日";
let reg = /\{(\d+)\}/g

console.log(reg.test(str))  //  true 
console.log(RegExp.$1)  // 0

console.log(reg.test(str))  //  true 
console.log(RegExp.$1)  // 1

console.log(reg.test(str))  // true 
console.log(RegExp.$1)  // 2

console.log(reg.test(str))  // false
console.log(RegExp.$1)  // 2 如果不匹配储存的是上次捕获的结果;
RegExp.$1~RegExp.$9   // 获取当前本次匹配后,第一个到第九个分组信息;如果只有一个分组那么只有RegExp.$1有值,
两个分组RegExp.$1和RegExp.$2有值,以此类推;

这个方法一般不用

2、replace()

let str = "2019-10-21"
let reg = /^(\d{4})-(\d{1,2})-(\d{1,2})$/
str = str.replace(reg,function (...arg){
   let [,$1,$2,$3] = arg
   console.log($1,$2,$3)  // 2019 10 21
   return $1+"年"+$2+"月"+$3+"日"
})
console.log(str)

// replace函数的用法:
1、首先是拿replace和str 字符串进行匹配捕获,匹配了几次,回调函数就执行几次(分组捕获捕获了很多组,但是只匹配了一次);
2、replace方法不仅进行了捕获,还传递了捕获的结果信息(第一个参数:大正则匹配的内容,第二个参数:每个小分组的内容);
3、replace方法的返回值就是回调函数中return的值,如果不return则返回值为undefined;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容