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.

bxx
fuente

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?

ssgao
fuente
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");
}
Petar Ivanov
fuente
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);
}
Pan comido
fuente
1
function test(string) {
    return ! string.match(/abc|def/);
}
Flimzy
fuente
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;
}
Bemmu
fuente
0

Esto se puede hacer de 2 formas:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Girish Gupta
fuente