在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  HTML/ js正則問(wèn)題

js正則問(wèn)題

var str = "<p><a>這是一段文字</a></p>";
var pattern = /<([a-zA-Z]+)>(.*?)<\/\1>/;
console.log(pattern.exec(str));

clipboard.png

此代碼的運(yùn)行結(jié)果不太理解:

(.*?)是非貪婪模式,我覺(jué)得這部分應(yīng)該只匹配到 <a>這是一段文字,但實(shí)際運(yùn)行結(jié)果匹配到的是 <a>這是一段文字</a> ,多了個(gè)</a>,求解!

回答
編輯回答
毀與悔

這個(gè)不是貪婪模式引起的,是\1這個(gè)引起的,這個(gè)表示引用前面的分組的匹配,并且這個(gè)匹配的模式和分組里面的匹配規(guī)格必須一樣。所以分組匹配了a,\1就跟著匹配a.

2017年4月19日 20:58
編輯回答
情皺

非貪婪只是說(shuō)盡可能短的匹配,

如果(.?)后面不再跟東西了,那么肯定就是空字符串,因?yàn)?可以是匹配0個(gè)字符

// $2 === ''
/<([a-zA-Z]+)>(.*?)/

那如果用.+?呢

// $2 === '<'
/<([a-zA-Z]+)>(.+?)/

因?yàn)楸仨氈辽倨ヅ湟粋€(gè),所以給你一個(gè)html標(biāo)簽頭


但是盡可能短也是相對(duì)的。

// $2 === '<a>這是一段文字'
/<([a-zA-Z]+)>(.*?)<\/a>/

之所以(.*?)不匹配空字符串,是因?yàn)槿绻祷乜兆址?,那么中間的<a>這是一段文字就相當(dāng)于憑空消失了。

所以其實(shí)你可以把貪婪模式理解成:在滿(mǎn)足條件時(shí)匹配盡可能的短的數(shù)據(jù)

2017年10月5日 11:10