expresión regular de javascript para no coincidir con una palabra


87

¿Cómo utilizo una expresión regular de JavaScript para verificar una cadena que no coincide con ciertas palabras?

Por ejemplo, quiero una función que, cuando se le pase una cadena que contenga abco def, devuelva falso.

'abcd' -> falso

'cdef' -> falso

'bcd' -> verdadero

EDITAR

Preferiblemente, quiero una expresión regular tan simple como algo como [^ abc], pero no entrega el resultado esperado porque necesito letras consecutivas.

p.ej. yo quieromyregex

if ( myregex.test('bcd') ) alert('the string does not contain abc or def');

La declaración myregex.test('bcd')se evalúa en true.

Respuestas:


125

Esto es lo que busca:

^((?!(abc|def)).)*$

la explicación está aquí: ¿ Expresión regular para coincidir con una línea que no contiene una palabra?


1
¡Esta es la respuesta que espero! Gracias. Necesito una expresión regular en lugar de una función. Mi pregunta fue editada y surgieron respuestas para responder a la nueva versión de mi pregunta. Por eso utilicé una parte "EDITAR" para evitar confusiones.
bxx

2
¿Hay una respuesta que no coincida con una palabra completa? Su ejemplo "abc", "babc" y "abcd" fallan todos y cuando pasa "xyz". Necesito "abc" para fallar pero "abcd" para aprobar. Eliminar el .y *no parece funcionar
gman

18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}

1
¿Por qué estás capturando en tu expresión regular?
Flimzy

¡Buen punto! Creo que pensé que si no capturaba, podría significar ab (c | d) ef.
Petar Ivanov

1
Quizás sea mejor usar /abc|def/g.test(s)ese retorno booleano en este caso;)
538ROMEO

5

Aquí tienes una solución limpia:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}

1
function test(string) {
    return ! string.match(/abc|def/);
}

1
string.match(/abc|def/)es probablemente más eficiente aquí
SpliFF

O ..return !string.match(...
McKayla

1
Otra buena sugerencia ... ustedes deberían publicar sus propias respuestas :)
Flimzy

0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}

0

Esto se puede hacer de 2 formas:

if (str.match(/abc|def/)) {
                       ...
                    }


if (/abc|def/.test(str)) {
                        ....
                    } 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.