javascript - RegExp 不区分大小写的多词突出显示

标签 javascript jquery regex

我正在尝试突出显示关键字搜索是否正常工作。我遇到了几个问题。

  1. 不区分大小写适用于第一个单词,但希望它替换为原始单词,而不是小写的搜索单词。

即搜索趋势,它将趋势替换为趋势,我知道为什么,但想弄清楚如何替换回找到的词,而不是搜索到的词

  1. 第二个单词不区分大小写。

即搜索 trend Micro 与 trend Micro 不匹配。

这是 jsFiddle:http://jsfiddle.net/hh2zvjft/1/

if ($(".ProjectSearch").val().length > 0) {
    var searchedText = $(".ProjectSearch").val();
    var wordList = searchedText.split(" ");
    $.each(wordList, function (i, word) {
        $(".ProjectTaskGrid:contains('" + word + "')").each(function (i, element) {
            var rgxp = new RegExp(word, "gi");
            var repl = '<span class="search-found">' + word + '</span>';
            element.innerHTML = element.innerHTML.replace(rgxp, repl);
        });
    });
}

能否请您帮助确定问题并提供改进?谢谢!

用于获取代码的一些引用:

https://stackoverflow.com/a/120161/2727155

https://stackoverflow.com/a/10011639/2727155

最佳答案

高亮多个单词(忽略 HTML 标签)

const regEscape = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const EL_input = document.querySelector("#input");
const EL_area = document.querySelector("#area");
const org = EL_area.innerHTML; // Store the current HTML state

const highlight = () => {
  const val = EL_input.value;
  
  if (!val) return EL_area.innerHTML = org;
    
  const pts = regEscape(val.trim()).split(/ +/);
  const reg = new RegExp("(?![^<]+>)(" + pts.join("|") + ")", "ig");
  const res = org.replace(reg, '<span class="highlight">$1</span>');
  
  EL_area.innerHTML = res;
};

EL_input.addEventListener("input", highlight);
highlight();
div {
  padding: 5px;
  border: solid 1px #CCC;
}

.highlight {
  background: gold;
}
<input id="input" autocomplete=off type="text" value="tren pan com br" />

<div id="area">
  Renew Trend Worry-Free Business Security license
  that <a href="http://someweb.com">someweb.com</a> will expire in 60 days.<br>
  Activate BR like breakline trend
  and [ confirm <span>SOME <span>SPAN</span> IS HERE</span>
  upon electronic<br> delivery notification
  from Trend Micro
</div>

关于javascript - RegExp 不区分大小写的多词突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33000710/

相关文章:

javascript - 为什么ajax无法将数据返回到表td中的元素?

正则表达式 - 如何搜索单词的单数或复数版本

javascript - 如何将缓存图像显示到html div对象中

JavaScript RegEX 显式字符仅匹配一次

javascript - 如何使用 FormData 将文件发送到 Nodejs 并让 Node 发回确认消息?

jquery - 将字符串从 JS 传递到 Python Selenium

javascript - 如何将AS3.0连接到js中的变量?

javascript - 使用 ajax POST/GET 调用请求露天身份验证 token (Angular)

regex - 如何判断正则表达式中的匹配项之间是否存在三个或更多字符?

javascript - 为什么表达匹配整个句子