在考虑源串的情况下,不区分大小写匹配和替换

时间:2014-01-08 10:07:22

标签: javascript replace case-insensitive

我想在query粗体值的s范围内对query的值进行不区分大小写匹配。

如果我在s内找到var s="New York"; var query="new"; var result = s.replace(/query/i,'<strong>' + query + '</strong>'; 不能,只需执行以下操作:

s

从那时起,它还将query中的套管替换为{{1}}中的套管,这是我不想要的。我想把套管保留在s。

结果必须是:“约克”

2 个答案:

答案 0 :(得分:8)

如果你把它作为一个捕获组(用括号括起来),那么你可以使用占位符$1

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

查看实例:http://jsfiddle.net/2zau4/


正如评论中指出的 - 以及我从未知道的事情 - 是你实际上不需要捕获组,因为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")

正确的语法必须从带有“i”标志的字符串创建RegExp

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

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

答案 1 :(得分: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/