正则表达式的exec、RegExp.$1方法
- reg.exec每次匹配完成后,reg.lastIndex被设定为匹配命中的结束位置
- reg.exec传入其它语句时,lastIndex不会自动重置为0,需要手动重置
- reg.exec匹配结果可以直接从其返回值读取
- RegExp.$x保存了最近1次exec或test执行产生的子表达式命中匹配
以双向绑定字符串解析为例:
const str = '<span>{{var1}}</span><div>{{var2}}</div>'
const reg = /\{\{(.*?)\}\}/g
const match = str.match(reg) // 得到['{{var1}}', '{{var2}}']
const varRes = match.map(item => {
reg.lastIndex = 0 // exec方法每次使用后会将lastIndex值设为匹配后的index,更换字符串需要手动重置
reg.exec(item) // [ '{{var1}}', 'var1', index: 0, input: '{{var1}}', groups: undefined ]
return RegExp.$1 // RegExp.$1用于保存最近一次exec或test产生的匹配结果中,括号内的内容
})
console.log(varRes) // ['var1', 'var2']