2010-06-14 15 views

Respuesta

55

Es imposible que tanto (?=foo) y (?=baz) para que coincida al mismo tiempo. Se requeriría que el siguiente carácter sea ambos f y b simultáneamente, lo cual es imposible.

Tal vez usted quiere 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, la superposición (aunque la superposición no es posible en este caso específico).

+0

yo sólo probé en http://regexpal.com/. Sin cigarro. Tal vez esto es un error con regexpal? – user366735

+0

Lo siento. No importa, eso tenía sentido. Gracias. – user366735

+0

¿Obtuviste esto para trabajar en regexpal? No podría. – paragbaxi

3

Se necesita un operador o |:

Cadena: foo,bar,baz

Regex: (foo)|(baz)

Resultado: ["foo", "baz"]

0

Quizás esté interesado en algo como esto. Si desea seleccionar la línea completa cuando contiene tanto "foo" y "Baz", al mismo tiempo, este RegEx cumplirá que:

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

5

Ejemplo de un booleano (Y) más Búsqueda con comodines, el que estoy usando el interior de un javascript Autocompletar plugin:

cadena para que coincida con: "mi palabra"

cadena a buscar: "estoy en busca de mis palabras divertidas dentro de este texto"

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

Explicando:

^ posición de afirmar al principio de una línea

= positiva Lookahead

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

() Grupos

$ posición de afirmar al final de una línea

i modificador: insensibles. Sin distinción de mayúsculas y minúsculas (ignora el caso de [a-zA-Z])

m modificador: multilínea. Causas^y $ para que coincida con el inicio/final de cada línea (no sólo empezar/final de la cadena)

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

lo tanto, puede crear una función javascript que:

  1. Reemplazar caracteres reservados de expresiones regulares para evitar errores
  2. dividir su cadena en espacios
  3. encapsular sus palabras dentro de los grupos de expresiones regulares
  4. crear un patrón de expresión regular
  5. Ejecutar el partido 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>