2013-08-25 43 views
2
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区分大小写 - 这让事情变得更复杂一些,我认为?

回答

5

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

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

您还可以使用$1$2等指比赛的捕获组正则表达式。

+0

谢谢,这正是我所期待的。 –

1

replacement string可含有图案,特别是$&

$&
插入匹配的子串。

所以,你可以说:

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

使用已在text找到完全匹配的字符串。

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

相关问题