我有一组元素(比方说健身训练列表)。
我有一个搜索栏,我想创建一个搜索功能来查找特定的培训。
我知道如何过滤数组:
保持训练,其中名称以在搜索栏中键入的字符串开头
array = array.filter(function(item) { return item.name.toLowerCase().startsWith(searchFilter.toLowerCase()); });
Exemple: Search = "El"...
Results ->
["Elizabeth", "Elisa"]
Results not fetched ->
["Open Elios"]
在名称包含在搜索栏中输入的字符串
的地方保持训练array = _.filter(array, function(item) { return _.includes(item.name.toLowerCase(), searchFilter.toLowerCase()); });
Exemple: Search = "El"...
Results ->
["Elizabeth", "Open Elios", "Camel"]
但这不是我想要的:
- 在名称包含以在搜索栏中键入的字符串 开头的单词时继续训练
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/