2014-01-08 68 views
1

的尊重套管我想要的s大膽值之內的query值不區分大小寫匹配的部分。不區分大小寫的匹配和替換,而源字符串

如果我發現querys不能簡單地做:

var s="New York";  
var query="new"; 

var result = s.replace(/query/i,'<strong>' + query + '</strong>'; 

從那時起,它還將與query的外殼,這是我不想更換外殼的s。我想保持殼體在s中。

結果將是:「紐約」

回答

6

如果你把它捕獲組(用括號周圍),那麼你可以使用佔位符$1

var s="New York"; 
var result = s.replace(/(new)/i,'<strong>$1</strong>'); 
// result = <strong>New</strong> York 

看到活生生的例子:http://jsfiddle.net/2zau4/


正如在評論中指出 - 有什麼東西whic h I類從來不知道 - 是你不真正需要捕獲組爲JavaScript使用字符$&表示「整場比賽。」所以,你也可以這樣做:

var s="New York"; 
var result = s.replace(/new/i,'<strong>$&</strong>'); 
// result = <strong>New</strong> York 

最後一點我想你知道,你原來的語法將不起作用:

var s="New York";  
var query="new"; 

var result = s.replace(/query/i,'<strong>' + query + '</strong>'; 
-----------------------^ 
This is searching for literal "query" not 
    the variable query (containing the string "new") 

正確的語法必須從字符串創建RegExp與 「我」 標誌:

var s="New York";  
var query="new"; 

var result = s.replace(new RegExp(query,'i'),'<strong>$&</strong>'); 
+0

不需要組,只需使用'$&'。 – georg

+0

@ thg435 - 這很酷。每天學些新東西。 – Jamiec

+0

@Jamiec如果正則表達式的標準存儲在一個變種,將OP需要使用'新的RegExp()'? –

1
var s="New York";  
var query="new"; 
var result = s.replace(new RegExp(query,"i"),function(match){ 
    return "<strong>" + match + "</strong>"; 
}); 

JS小提琴:http://jsfiddle.net/F7Y8y/2/

相關問題