我想在query
粗体值的s
范围内对query
的值进行不区分大小写匹配。
如果我在s
内找到var s="New York";
var query="new";
var result = s.replace(/query/i,'<strong>' + query + '</strong>';
我不能,只需执行以下操作:
s
从那时起,它还将query
中的套管替换为{{1}}中的套管,这是我不想要的。我想把套管保留在s。
结果必须是:“新约克”
答案 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/