面试准备--正则篇

[]内表达的意思

可以用\转义字符 也可以不用转义字符其实在【】里除了转义字符需要转义其他的字符可以被当做普通字符,不过你非要用转义字符也无所谓如 \. 和 . 是同一效果。

[]里 不会出现2位数,[a-z] :
 任意字母 []中的表示任意一个都可以
 [^a-z] : 非字母 []^代表除了

replace里面$0 $1 $2 的意思

看下面代码

	var obj = {},
 	reg = /([^?&#+]+)=([^?&#+]+)/g;
    var str = 'https://www.baidu.com?a=1&b=2'
    str.replace(reg,function($0,$1,$2){
      // 函数会执行多次 每一次相当于一个 exec()返回$0是匹配字符串 $1 $2是分组内容
      obj[$1] = $2;
    })

这是一个获取url参数和参数值的正则 如 结果为 {a:1, b:2}
仔细看里面有两个分组(),并且每个分组里匹配的是除了?&#+的任意组合字母,也就是参数名,replace函数里的回调函数里有三个参数,这个回调函数会被执行多次,每一次相当于执行一个 exec(),(全局标识符下,每次执行exec()都会顺着往下捕获一个匹配字符串,如第一次执行捕获第一个a=1,第二次执行则捕获到第二个b=2,如果不是全局/g则每次都是捕获第一个匹配字符串)
返回$0是匹配字符串,a=1, $1 $2是分组内容 分别为a 和1,

再来说下exec()

当我们用exec进行捕获时,如果正则没有加’g’标识符,则exec捕获的每次都是同一个,当正则中有’g’标识符时 捕获的结果就不一样了,我们还是来看刚刚的例子

var str = 'abc123cba456aaa789';
var reg = /\d+/g;  //此时加了标识符g
console.log(reg.lastIndex)
// lastIndex : 0 
console.log(reg.exec(str))
//  ["123", index: 3, input: "abc123cba456aaa789"]
console.log(reg.lastIndex)
// lastIndex : 6
console.log(reg.exec(str))
// ["456", index: 9, input: "abc123cba456aaa789"]
console.log(reg.lastIndex)
// lastIndex : 12
console.log(reg.exec(str))
// ["789", index: 15, input: "abc123cba456aaa789"]
console.log(reg.lastIndex)

exec的捕获还受分组()的影响
如
var str = '2017-01-05';
var reg = /-(\d+)/g
// ["-01", "01", index: 4, input: "2017-01-05"]
"-01" : 正则捕获到的内容 也就是replace函数中的 $0
"01"  : 捕获到的字符串中的小分组中的内容 $1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值