Saltar al contenido

Operador Regex AND

octubre 23, 2021
apple touch icon@2

Ejemplo de una búsqueda booleana (Y) más comodín, que estoy usando dentro de un complemento de Autocompletar de JavaScript:

Cadena para que coincida: "my word"

Cadena para buscar: "I'm searching for my funny words inside this text"

Necesita la siguiente expresión regular: /^(?=.*my)(?=.*word).*$/im

Explicando:

^ afirmar la posición al comienzo de una línea

? = Lookahead positivo

. * coincide con cualquier carácter (excepto nueva línea)

() Grupos

PS afirmar la posición al final de una línea

I modificador: insensible. Coincidencia que no distingue entre mayúsculas y minúsculas (ignora el caso de [a-zA-Z])

metro modificador: multilínea. Hace que ^ y $ coincidan con el comienzo / final de cada línea (no solo el comienzo / final de la cadena)

Pruebe la expresión regular aquí: https://regex101.com/r/iS5jJ3/1

Entonces, puede crear una función de javascript que:

  1. Reemplace los caracteres reservados de expresiones regulares para evitar errores
  2. Divide tu cuerda en espacios
  3. Encapsula tus palabras dentro de grupos de expresiones regulares
  4. Crea un patrón de expresiones regulares
  5. Ejecuta la coincidencia de expresiones regulares

Ejemplo:

function fullTextCompare(myWords, toMatch){
    //Replace regex reserved characters
    myWords=myWords.replace(/[-/\^$*+?.()|[]{}]/g, '\$&');
    //Split your string at spaces
    arrWords = myWords.split(" ");
    //Encapsulate your words inside regex groups
    arrWords = arrWords.map(function( n ) {
        return ["(?=.*"+n+")"];
    });
    //Create a regex pattern
    sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
    //Execute the regex match
    return(toMatch.match(sRegex)===null?false:true);
}

//Using it:
console.log(
    fullTextCompare("my word","I'm searching for my funny words inside this text")
);

//Wildcards:
console.log(
    fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
close