expressão regular de javascript para não corresponder a uma palavra


87

Como utilizo uma expressão regular javascript para verificar uma string que não corresponde a certas palavras?

Por exemplo, eu quero uma função que, quando passada uma string que contém abcou def, retorne falso.

'abcd' -> falso

'cdef' -> falso

'bcd' -> verdadeiro

EDITAR

De preferência, quero uma expressão regular tão simples como algo como [^ abc], mas não entrega o resultado esperado, pois preciso de letras consecutivas.

por exemplo. eu queromyregex

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

A declaração myregex.test('bcd')é avaliada para true.

Respostas:


125

Isso é o que você está procurando:

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

a explicação está aqui: Expressão regular para corresponder a uma linha que não contém uma palavra?


1
Esta é a resposta que espero! Obrigado. Preciso de uma expressão regular em vez de uma função. Minha pergunta foi editada e surgiram respostas para responder à nova versão da minha pergunta. É por isso que usei uma parte "EDITAR" para evitar confusão.
bxx

2
Existe uma resposta que não corresponde a uma palavra inteira? Seu exemplo "abc", "babc" e "abcd" todos falham e onde como "xyz" passa. Preciso que "abc" falhe, mas "abcd" passe. Removendo .e *não parece funcionar
gman

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

1
Por que você está capturando em sua regex?
Flimzy

Bom ponto! Acho que pensei que se não capturar, poderia significar ab (c | d) ef.
Petar Ivanov

1
Talvez seja melhor usar /abc|def/g.test(s)esse return um booleano neste caso;)
538ROMEO 05/01/19

5

Aqui está uma solução limpa:

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/)é provavelmente mais eficiente aqui
SpliFF

Ou ..return !string.match(...
McKayla

1
Outra boa sugestão ... vocês devem postar suas próprias respostas :)
Flimzy

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

0

Isso pode ser feito de duas maneiras:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.