In my app I have implemented local search using Regular expressions, I have problem, I could not find solution even after much searching, as you can see I have words
array, Which I filter based on condition, I want to implement something like that:
if user writes
ele
into the search box, I want to get['electric', 'elektric']
, same should happen if user writesric
into the input field result:['electric', 'elektric']
, but In case the user enters the exact name, for exampleelectric
result should be :['electric']
At last, if input will becooling
result should be['engine cooling']
As you can see, My goal is to system search exact word or exact letters or the closest logical option. I will take any advice, thanx
let words = ['electric', 'elektric', 'engine cooling']
function bestMatch(event){
let match = words.filter((e) => new RegExp(`^${event.value}`,"ig").test(e));
console.log(match)
}
<input type="text" placeholder="best match" onchange="bestMatch(this)" />
CodePudding user response:
Add .*
before and after to get the regex to work so that position in word doesn't matter, though regex is unneccesary based on your requirements. Instead you can use includes
. Finally onkeyup
might be better/faster in getting results
With regex:
let words = ['electric', 'elektric', 'engine cooling']
function bestMatch(event){
let match = words.filter((e) => new RegExp(`^.*${event.value}.*`,"ig").test(e));
console.log(match)
}
<input type="text" placeholder="best match" onchange="bestMatch(this)" />
Without regex (and using onkeyup
):
let words = ['electric', 'elektric', 'engine cooling']
function bestMatch(event){
let match = words.filter((e) => e.includes(event.value.toLowerCase()))
console.log(match)
}
<input type="text" placeholder="best match" onkeyup="bestMatch(this)" />
CodePudding user response:
new RegExp(${event.value}
).test(e)