不区分大小写的包装子字符串和标签

时间:2013-08-25 03:12:02

标签: javascript regex

var searchText = "hello world";
var searchTextRegExp = new RegExp(searchText , "i"); //  case insensitive regexp
var text = "blahblah Hello Worldz";

text.replace(searchTextRegExp , '<match>' + searchText + '</match>');

我正在尝试改进这段代码。目前,它降低了Hello World的范例,因为它使用searchText作为替换值。

我希望只使用标记包装Hello World,而不是修改其大写或小写,同时仍保持不区分大小写的搜索。

这样做的好方法是什么? string.indexOf是区分大小写的,我相信 - 这让事情变得复杂一些吗?

3 个答案:

答案 0 :(得分:7)

在替换文本中,您可以使用$&来引用正则表达式匹配的任何内容。

text = text.replace(searchTextRegExp , '<match>$&</match>');

您还可以使用$1$2等来引用正则表达式中捕获组的匹配项。

答案 1 :(得分:1)

replacement string可以包含模式,特别是$&

  

$&
  插入匹配的子字符串。

所以你可以说:

text.replace(searchTextRegExp , '<match>$&</match>').

使用text中找到的确切字符串。

答案 2 :(得分:1)

您可以使用indexOf并且没有正则表达式。怎么样:

var index = text.toLowerCase().indexOf(searchText);
if (index != -1) {
    text = text.substring(0, index - 1) + 
        "<match>" + 
            text.substr(index, searchText.length) + 
        "</match>" + 
        text.substring(index + searchText.length);
 }

FIDDLE