$1,$2表达的是小括号分组里面的内容:$1是第一个小括号里的内容,$2是第二个小括号里面的内容,依此类推。
比如(\d{4})(\d{2})(\d{2}) 匹配"20190919"。$1是第一个括号里匹配的2019,$2是第二个括号里匹配的09,$3是第三个括号里匹配的19。
然后可以利用实现一个简单的时间格式化函数
// 日期转换:yyyymmdd -> yyyy-mm-dd,type=true时,yyyy-mm-dd -> yyyymmdd
dateFormate (date, type) {
if (date) {
return type ? date.replace(/-/g, '') : date.replace(/^(d{4})(d{2})(d{2})$/, '$1-$2-$3')
}
},
"20112233"
.replace(/^(d{4})(d{2})(d{2})$/,
"$1-$2-$3"
)
"20112233"
.replace(/(d{4})(d{2})(d{2})/,
"$1-$2-$3"
)
str.replace(reg,function(){}) 应用的地方很多啊,最基本的就是比如 str 是一串数字,比如你要把这些数字替换成大写的汉字
var ary=["一","二","三","四","五","六"]
"123456".replace(/d/g,function(i){
return ary[i - 1];
})
还有一种用法就是 不替换 字符串,只是利用 replace 可以匹配几次,这个 function 就执行几次的特性来做一些事情,比如格式化时间字符串等等。
$1--$9 是RegExp 自带的,只要放生了匹配就会有。 test exec str的replace 都会有。代表的是 分组,即小括号里面的小正则 捕获到的内容。
/^(d{4})[/-](d{1,2})[/-](d{1,2})$/,比如这个 简单的匹配 年月日的正则,我们就可以通过 $1 $2 $3 获取到并进行处理。
var reg=new RegExp("(http://www.qidian.com/BookReader/)(\d+),(\d+).aspx","gmi");
var url="http://www.qidian.com/BookReader/1017141,20361055.aspx";
var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
你可能注意到了,在reg正则表达式里的几对"()",比如`("(http://www.qidian.com/BookReader/)` ,`(\d+)`,
$n就指的是匹配到的第n个括号里的内容,
$n主要是用在后面的程序需要引用前面的正则匹配到的内容时。
在这个例子里:
$1 : http://www.qidian.com/BookReader/
$2 : 1017141
$3 : 20361055
你看到上面的replace实际上是用冒号后面的内容替换冒号前面的“$n”,而冒号后面的内容实际上就是正则里的“()”分组正则表达式在url里匹配到的内容