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是区分大小写的,我相信 - 这让事情变得复杂一些吗?
答案 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);
}