gpt4 book ai didi

javascript - 分割空格并搜索用户输入

转载 作者:行者123 更新时间:2023-11-28 16:48:38 25 4
gpt4 key购买 nike

我有一个输入字段,用户可以在其中搜索数据库中的某个名称。该数据库包含诸如“Doe, John”之类的名称。

如果用户搜索“john”,我认为这很容易实现。但是,如果他或她搜索“john Doe”,我想实现对 john 或搜索 doe 的逻辑搜索。

对于正则表达式,我完全迷失了。这样的事情有可能吗?然而,有了 JS,我至少可以考虑这个算法:

  • 将输入拆分为空格并创建数组
  • 删除特殊字符
  • 过滤从数据库检索的 JSON 对象
  • 检查 item 是否包含清理后的字符串数组

至于 JS 函数,我尝试了一些东西(徒劳):

        let search = 'John Doe' //user input
let data = ['Doe, John', 'Bean, Mister'] //data from database
let split = search.split(" ") //split the whitespace into two arrays
split = split.map(item => { return item.replace(/[^\w\s]+/gi, '')}) //remove dots, commas etc.
let result = data.filter(item => { //filter each item from the data...
split.forEach(element => {
let found = item.match(new RegExp(element, "i")) // so here I get matches, but how can I move them up the let the filter method return true?
return found.length
}).length>0


})
console.log(result)

感谢Taplars的评论,我使用了map方法而不是forEach:

let data = ['Doe, John', 'Bean, Mister']
let split = search.split(" ")
split = split.map(item => { return item.replace(/[^\w\s]+/gi, '')})
let result = data.filter(item => {
let filtered = split.map(element => {
let ret = item.match(new RegExp(element, "i"))
return ret
})
console.log(item,filtered) //now I have two arrays, one with something meaningful and one with [null,null]. How can I remove empty arrays?
return filtered.length>0
})
console.log(result)

最佳答案

尝试以下操作:

  • 获取搜索表达式并将其转换为一系列正则表达式
  • 迭代数据并检查部分或所有表达式是否匹配

const data = ['Doe, John', 'Doe, Jane', 'Smith, John', 'Bean, Mister'] // data from database

function searchEvery(input) {
const wordExpressions = input.split(/[^\w]+/g)
.filter(word => word) // remove empty entries
.map(word => new RegExp(word, 'i')); // convert to regular expression
return data.filter(item => wordExpressions.every(exp => exp.test(item)));
}

function searchSome(input) {
const wordExpressions = input.split(/[^\w]+/g)
.filter(word => word) // remove empty entries
.map(word => new RegExp(word, 'i')); // convert to regular expression
return data.filter(item => wordExpressions.some(exp => exp.test(item)));
}

console.log(searchEvery('John Doe'))
console.log(searchEvery('John'))
console.log(searchEvery('Doe'))

console.log(searchSome('John Doe'))

关于javascript - 分割空格并搜索用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com