鍍金池/ 問(wèn)答/HTML/ 正則表達(dá)式為何取到的是兩個(gè)值?

正則表達(dá)式為何取到的是兩個(gè)值?

代碼如下

match(/src="([^"]*)"/)

取到的是

src="http://圖片地址",http://圖片地址

請(qǐng)問(wèn)該如何只獲取http://圖片地址這一部分呢?正則該怎么寫(xiě)?非常感謝!~

回答
編輯回答
尋仙

兩個(gè)值是因?yàn)橐粋€(gè)是匹配完整的正則表達(dá)式, 一個(gè)是匹配小括號(hào)以內(nèi)部分, 你不用前一個(gè)匹配忽略即可. RegExp.$1是你想要的結(jié)果.

2017年1月19日 10:46
編輯回答
陪我終

關(guān)于正則表達(dá)式可以看下司徒正美的文章:JavaScript 正則表達(dá)式

題主正則表達(dá)式中使用了“捕獲分組(分組的一種類(lèi)型,相對(duì)于非捕獲分組)”,所以匹配結(jié)果除了整個(gè)正則表達(dá)式的匹配內(nèi)容之外,還包括捕獲到的分組內(nèi)容,舉個(gè)例,看圖:

clipboard.png

至于要取值,在匹配成功的情況下,match() 返回的結(jié)果是個(gè)數(shù)組,第 0 個(gè)元素是整個(gè)正則表達(dá)式的匹配內(nèi)容,往后依次是各個(gè)分組匹配的內(nèi)容(按括號(hào)先后順序),而匹配不成功的情況下,返回 null,所以取值表達(dá)式可以這樣寫(xiě)

const value = (s.match(re) || [])[1];

如果 value 值為 undefined 則表示匹配不成功(成功的情況下就算沒(méi)有匹配的字符也會(huì)是空字符串而不會(huì)是 undefined)。

2017年5月9日 23:02
編輯回答
離殤
var s = 'src="http://圖片地址"';
var re = /src="([^"]*)"/;
s.match(re);
console.log(RegExp.$1);
2017年11月4日 22:31