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:
- Reemplazar los caracteres reservados de la expresión regular para evitar errores
- Divida su cuerda en espacios
- Encapsule sus palabras dentro de grupos regex
- Crear un patrón de expresiones regulares
- 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)+.*