2014-01-08 37 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/

相关问题