javascript - Lodash - 搜索字符串是否包含以开头的单词

标签 javascript arrays search filter lodash

我有一组元素(比方说健身训练列表)。

我有一个搜索栏,我想创建一个搜索功能来查找特定的培训

我知道如何过滤数组:

  1. 保持训练,其中名称以在搜索栏中键入的字符串开头

    array = array.filter(function(item) {
       return item.name.toLowerCase().startsWith(searchFilter.toLowerCase());
    });
    

Exemple: Search = "El"...

Results -> ["Elizabeth", "Elisa"]

Results not fetched -> ["Open Elios"]

  1. 名称包含在搜索栏中输入的字符串

    的地方保持训练
    array = _.filter(array, function(item) {
       return _.includes(item.name.toLowerCase(), searchFilter.toLowerCase());
    });
    

Exemple: Search = "El"...

Results -> ["Elizabeth", "Open Elios", "Camel"]

但这不是我想要的:

  1. 名称包含以在搜索栏中键入的字符串
  2. 开头的单词时继续训练

Exemple: Search = "El"...

Results -> ["Elizabeth", "Open Elios"]

Results not fetched -> ["Camel"]

最佳答案

您可以为此使用正则表达式,例如:

const result = ["Elizabeth", "Open Elios", "Camel"].filter(v => /\bel/i.test(v));
console.log(result);

重要的部分是 \b 这意味着单词边界,基本上这个表达式 /bel 是测试值是否包含以单词边界开头并被el.

这是一个从字符串构造正则表达式的完整示例:

const array = ["Elizabeth", "Open Elios", "Camel"];
const searchFilter = 'El';
const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

const result = array.filter(value => new RegExp(`\\b${escapeRegExp(searchFilter)}`, "i").test(value));

console.log(result);

关于javascript - Lodash - 搜索字符串是否包含以开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305052/

相关文章:

javascript - 将日期时间数据从 Django 传递到 Javascript

javascript - 模态中的TinyMCE,模态在将数据传递给div后不会重新打开

ruby - 如何将带有 JSON 字符串的数组转换为 JSON 对象 (ruby)

javascript - 按自定义变量对数组排序

php - 计算搜索查询返回的行数

javascript - React Native : Error :"Cannot read property ' name' of undefined,“虽然包含名称的对象不是未定义的

javascript - 如何在 node.js 中同步函数和 promises

ios - if(!array.count)是否检查数组是否为空?

objective-c - 基于 View 的NSTableView过滤+动画

c# - 用于索引文档和文本的良好搜索技术是什么