javascript - 搜索结果的粗体子字符串取决于搜索查询

标签 javascript regex

我正在尝试根据用户的输入但使用原始拼写来实现搜索结果的粗体部分。 我想避免点、多个空格、破折号,并使其不区分大小写。

例如,我有一个简单的搜索结果:Al。贾娜

我正在尝试将搜索的部分加粗,所以:

当用户输入 al 时,我想显示 -> Al。贾娜

Al -> Al。贾娜

AL -> Al。贾娜

al jana -> Al。贾娜

jana -> 阿尔。 贾娜

铝。 Jana -> Al。贾娜

或者如果我们有一个搜索结果 Al。 Jana Something - More 并且用户键入 something more 它应该返回:Al。 Jana Something - More

到目前为止我写了这段代码:

function modify(result, query) {
    let re = new RegExp(query, 'ig');
    return result.replace(/- /g, "").replace(/\./g, "").replace(re, '<b>' + query + '</b>'); //replacing "- " as dash is always surrounded with spaces so it trims one unnecessary space; is there a better way to make "inside-trim"?
}

let bolded = modify("Al. Jana", "al jana");
console.log(bolded);

fiddle :https://jsfiddle.net/ayb8Lj4r/

但这不是我想要实现的。也许我应该大量使用 .indexOf?我不确定。

最佳答案

您需要在搜索查询的所有单个字符之间添加 [-\s.]* 模式。这将允许任意数量的空格,-. 字符之间的字符。如果你想允许任何非单词字符,你可以使用 \W* 代替。

此外,您应该转义所有特殊字符,否则,如果查询包含 (+ 之类的字符,结果将不会如预期。

这是固定的片段:

function modify(result, query) {
  var re = new RegExp(query.split("").map(function(x) { 
      return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
  }).join("[-\\s.]*"), 'ig');
  return result.replace(re, '<b>$&</b>');
}

var bolded = modify("Al. Jana Something - More", "al jana");
document.querySelector("#result").innerHTML = bolded;
<div id="result"/>

关于javascript - 搜索结果的粗体子字符串取决于搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59461175/

相关文章:

变量的 JavaScript 设置值失败

javascript - 如何使用循环将小于 N 的每个正整数相加求和?

regex - 自动查找文件名中的编号模式

javascript - 使用正则表达式搜索元素的节点列表

regex - Perl:标量内的赋值和字符串匹配(正则表达式)

javascript - 如何在背景更改时更改文本颜色?

javascript - AngularJs - 如何在将新数据添加到数据表后重新加载页面

java - 正则表达式在每个字符处拆分并删除所有空格

javascript - 如何使用 $sce.trustAsHtml 在 trNgGrid 中显示 html 内容

regex - 语言标签的正则表达式(由 BCP47 定义)