zl程序教程

您现在的位置是:首页 >  前端

当前栏目

正则表达式中 的$1,$2与实际应用

2023-09-11 14:19:54 时间

  $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里匹配到的内容