regular pattern operator one from examples different and regex and-operator

regex - pattern - regular expression examples



Regex Y operador (4)

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

Cadena para combinar: "mi palabra"

Cadena para buscar: "Estoy buscando mis palabras divertidas dentro de este texto"

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

Explicando:

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

? = Mirada positiva

. * coincide con cualquier personaje (excepto la nueva línea)

() Grupos

$ assert position al final de una línea

i modificador: insensible. Coincidencia insensible a mayúsculas y minúsculas (ignora el caso de [a-zA-Z])

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

Pruebe la Regex aquí: https://regex101.com/r/iS5jJ3/1

Entonces, puedes crear una función de JavaScript que:

  1. Reemplazar los caracteres reservados de la expresión regular para evitar errores
  2. Divida su cuerda en espacios
  3. Encapsule sus palabras dentro de grupos regex
  4. Crear un patrón de expresiones regulares
  5. Ejecute el emparejamiento 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 = $.map( arrWords, 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") );

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Basado en esta respuesta

Expresiones regulares: ¿Hay un operador AND?

Intenté lo siguiente en http://regexpal.com/ pero no pude hacerlo funcionar. ¿Qué me falta? ¿Javascript no lo admite?

Regex: (?=foo)(?=baz)

Cadena: foo,bar,baz


Es imposible para ambos (?=foo) y (?=baz) coincidir al mismo tiempo. Requeriría que el siguiente personaje sea tanto f como b simultáneamente lo cual es imposible.

Quizás quieras esto en su lugar:

(?=.*foo)(?=.*baz)

Esto dice que foo debe aparecer en cualquier lugar y baz debe aparecer en cualquier lugar, no necesariamente en ese orden y posiblemente superposición (aunque la superposición no es posible en este caso específico).


Necesita un operador OR | :

Cadena: foo,bar,baz

Regex: (foo)|(baz)

Resultado: ["foo", "baz"]


Tal vez estás buscando algo como esto. Si desea seleccionar la línea completa cuando contiene tanto "foo" como "baz" al mismo tiempo, este RegEx cumplirá lo siguiente:

.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*