Javascript 正则表达式替换html标记外的文本

Javascript 正则表达式替换html标记外的文本,javascript,regex,Javascript,Regex,我正在开发一个自动完成组件,它可以突出显示搜索文本的所有内容。我所做的是将输入的文本按单词进行分解,并将这些单词的每一次出现都包装成一个 我的代码如下所示 inputText = 'marriott st'; text = "Marriott east side"; textSearch = inputText.split(' '); for (var i in textSearch) { var regexSearch = new RegExp('(?!<\/?strong>)

我正在开发一个自动完成组件,它可以突出显示搜索文本的所有内容。我所做的是将输入的文本按单词进行分解,并将这些单词的每一次出现都包装成一个 我的代码如下所示

inputText = 'marriott st';
text = "Marriott east side";
textSearch = inputText.split(' ');
for (var i in textSearch) {
  var regexSearch = new RegExp('(?!<\/?strong>)' + textSearch[i]), "i");
  var textReplaced = regexSearch.exec(text);
  text = text.replace(regexSearch, '< strong>' + textReplaced + '< /strong>');
}
inputText='marriott st';
text=“万豪东区”;
textSearch=inputText.split(“”);
for(文本搜索中的变量i){
var regexSearch=newregexp(“(?!)”+textSearch[i]),“i”);
var textReplaced=regexSearch.exec(text);
text=text.replace(regexSearch,“”+textcreplaced+”);
}
例如,考虑到结果:“万豪东区”

和输入文本:“万豪圣”

我应该

  <strong>marriot< /strong > ea < strong >st < /strong > side
万豪酒店
我越来越

  <<strong>st</strong>rong>marriot</<strong>st </strong>rong>ea<<strong>st</strong> rong>s</strong> side
万豪酒店
有什么办法可以改进我的正则表达式,以避免在html标记中出现错误?谢谢

   /(?!<\/?strong>)st/
/(?!)st/

在每次搜索之前,我建议每次使用(或保存)原始搜索字符串。例如,在当前情况下,这意味着您可以将所有“”和“”标记替换为“”。这将有助于保持正则表达式的简单性,特别是当您决定在将来添加其他html标记和格式时

我将一次性处理字符串。可以从搜索字符串中创建一个正则表达式:

var search_pattern = '(' + inputText.replace(/\s+/g, '|') + ')';
// `search_pattern` is now `(marriot|st)`
text = text.replace(RegExp(search_pattern, 'gi'), '<strong>$1</strong>');
var search_pattern='('+inputText.replace(/\s+/g,'.')+');
//“搜索模式”现在是“(万豪街)`
text=text.replace(RegExp(搜索模式,'gi'),“$1”);

您甚至可以首先拆分搜索字符串,按长度对单词进行排序并将它们组合起来,以便为较长的匹配提供更高的优先级


您肯定应该在字符串中转义特殊的正则表达式字符:。

这太棒了!这么简单。。。谢谢