Estoy tratando de escribir un código de script java que la sugerencia automática se basa en cadenas previas al juicio, por así decirlo.
aquí un ejemplo de lo que quiero decir:
si tenemos una matriz de cadenas => ['texto', 'manzana', 'texas', 'tiempo', 'java', 'java script', 'bolígrafo']
lo que quiero lograr es esto: cuando el usuario escribe ==> "te", la función debe devolver esto ==> 'texto' y 'texas'
PERO
si el usuario escribe ==> "t*e" O "t e" con espacio entre la función, debería devolver esto ==> 'texto', 'texas' Y 'tiempo' ya que contiene las dos letras sin importar el orden
lo mismo si el usuario escribe ==> "p*e" O "p e", el resultado debería ser ==> 'apple' y 'pen' ya que el stand contiene las letras 'p' y 'e'
aquí lo que he hecho hasta ahora
const nameInput = document.getElementById('name') const names = [ 'text' , 'apple' , 'texas' , 'time' , 'java' , 'java script' , 'pen' ] nameInput.addEventListener('keyup', ()=> { // console.log(nameInput.value) const text = nameInput.value.trim().replace(/\s/g, '') // console.log(text) const a = names.filter(name => name.includes(text)) console.log(a) }) <input type="text" placeholder="search" id="name">Según su publicación t*e está fallando ya que no los alcanza en su expresión regular. Una forma más robusta es reemplazar todos los caracteres alfanuméricos. Puede hacerlo rápidamente con un ligero cambio de expresión regular a /[\W_]+/g
const text = nameInput.value.trim().replace(/[\W_]+/g, '')Código de trabajo a continuación
const nameInput = document.getElementById('name') const names = ['text', 'apple', 'texas', 'time', 'java', 'java script', 'pen'] nameInput.addEventListener('keyup', () => { // console.log(nameInput.value) const text = nameInput.value.trim().replace(/[\W_]+/g, '') // console.log(text) const a = names.filter(name => name.includes(text)) console.log(a) }) <input type="text" placeholder="search" id="name">