2014-11-05 104 views
0
var x = "SomeText&nbsp;<a href=\"http://g.com\">http://g.com</a>"; 
var y = x.replace(/<a href="([^"]+)">([^<]+)<\/a>/igm, ('$2' == '$1')?"t":"f"); 

比較返回false。而現在y是「SomeText   f」。 如何比較並得到「SomeText   t」?我在這種情況下錯過了什麼嗎?javascript正則表達式中的反向引用的比較

同時打印兩個引用會打印相同的字符串。

var y = x.replace(/<a href="([^"]+)">([^<]+)<\/a>/igm, '($2)($1)') 

這將爲後面的引用輸出相同的url。

回答

1

JS只會對$1$2這樣的字符串做任何特殊處理的唯一時間是它作爲結果字符串的一部分傳遞給.replace()的第二個參數。

你有什麼'$2' === '$1'if the string "$2" is the same as the string "$1",這顯然總是假的。

相反,您可以使用.match()方法將各種反向引用作爲可以編入索引的數組。

嘗試以下操作:

var x = "SomeText&nbsp;<a href=\"http://g.com\">http://g.com</a>"; 
var regex = /<a href="([^"]+)">([^<]+)<\/a>/igm; 
var matches = x.match(regex); 
var y = x.replace(regex, matches[2] == matches[1]?"t":"f"); 
+0

喔確定..所以假設x變量與文本一起多個環節,我們需要與之相匹配的()一次應用正則表達式來讓所有的反向引用,然後用計數器,然後使用替換功能.. 這有助於..謝謝格雷格。 – kameswarib 2014-11-05 05:59:25

+0

如果您需要爲替換字符串以外的任何目的獲取反向引用的值,則需要使用'string.match(regex)'或'regex.exec(string)'來獲取僞陣列的結果,其中元素'[0]'是由正則表達式匹配的完整字符串,'[1]'是反向引用#1的匹配(如果有的話,如果不匹配則爲空/未定義)。 – GregL 2014-11-05 06:13:01

+0

對於任何具有href屬性和內部文本作爲相同鏈接的鏈接,我們希望以不同的模式顯示它。對於所有其他鏈接,我們將使用不同的模式。因此,使用替換函數。但是,這看起來像是不可能的。如果我們在字符串中有多個鏈接,我們將無法檢查每個鏈接的href屬性和鏈接文本的相等性,並用正確的格式進行替換。 – kameswarib 2014-11-05 06:26:09