I want to filter over a collection of items with an eventual wildcard.
Let's say, I have the following items:
const items = ['Banana', 'Apple', 'Melon']
I now want to filter with the following strings:
e
Expected output: None
*e
Expected output: Apple
*e*
Expected output: Apple, Melon
ana
Expected output: None
*ana
Expected output: Banana
*an
Expected output: none
*an*
Expected output: Banana
I hope you get my intention. Is there any smart way to do it with regex or standard JS functions / libraries? I couldn't find something so far.
You can construct a regular expression by replacing *
s with .*
to match any characters, and surround the wildcard string with ^
and $
(to match the beginning and the end):
const items = ['Banana', 'Apple', 'Melon']
const filterBy = str => items.filter(
item => new RegExp('^' + str.replace(/\*/g, '.*') + '$').test(item)
);
console.log(filterBy('e'));
console.log(filterBy('*e'));
console.log(filterBy('*e*'));
console.log(filterBy('ana'));
console.log(filterBy('*ana'));
console.log(filterBy('*an'));
console.log(filterBy('*an*'));
Note that if the wildcard string ever has any other characters with a special meaning in a regular expression, you'll have to escape them first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With