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

Flo*_*Flo 1 javascript replace case-insensitive

我想要的值不区分大小写的匹配部分query的值的范围内s大胆.

如果我发现querys不能简单地做:

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

var result = s.replace(/query/i,'<strong>' + query + '</strong>';
Run Code Online (Sandbox Code Playgroud)

从那以后它也将用套管替换s套管query,这是我不想要的.我想把套管保持在s中.

结果将是:" 新的 York"的

Jam*_*iec 8

如果将其设为捕获组(用括号括起来),则可以使用占位符$1:

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

看实况例子:http://jsfiddle.net/2zau4/


正如评论中指出的 - 以及我从未知道的事情 - 是你实际上不需要捕获组,因为javascript使用字符$&来表示"整个匹配".所以你也可以这样做:

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

作为最后一点,我假设您意识到原始语法不起作用:

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")
Run Code Online (Sandbox Code Playgroud)

正确的语法必须RegExp从带有"i"标志的字符串创建一个:

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

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