var str = "<p><a>这是一段文字</a></p>";var pattern = /<([a-zA-Z]+)>(.*?)<\/\1>/;console.log(pattern.exec(str));此代码的运行结果不太理解:(.*?)是非贪婪模式,我觉得这部分应该只匹配到 <a>这是一段文字,但实际运行结果匹配到的是 <a>这是一段文字</a> ,多了个</a>,求解!
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
非贪婪只是说尽可能短的匹配,
如果(.?)后面不再跟东西了,那么肯定就是空字符串,因为.可以是匹配0个字符
// $2 === ''
/<([a-zA-Z]+)>(.*?)/
那如果用.+?呢
// $2 === '<'
/<([a-zA-Z]+)>(.+?)/
因为必须至少匹配一个,所以给你一个html标签头
但是尽可能短也是相对的。
// $2 === '<a>这是一段文字'
/<([a-zA-Z]+)>(.*?)<\/a>/
之所以(.*?)不匹配空字符串,是因为如果返回空字符串,那么中间的<a>这是一段文字就相当于凭空消失了。
所以其实你可以把贪婪模式理解成:在满足条件时匹配尽可能的短的数据
米脂
TA贡献1836条经验 获得超3个赞
添加回答
举报
0/150
提交
取消
