javascript espressione regolare per non trovare una parola


87

Come si usa un'espressione regolare javascript per controllare una stringa che non corrisponde a determinate parole?

Ad esempio, voglio una funzione che, se passata una stringa che contiene abco def, restituisca false.

'abcd' -> falso

'cdef' -> false

'bcd' -> vero

MODIFICARE

Preferibilmente, desidero un'espressione regolare semplice come qualcosa come [^ abc], ma non fornisce il risultato atteso poiché ho bisogno di lettere consecutive.

per esempio. Vogliomyregex

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

L'istruzione myregex.test('bcd')viene valutata a true.

Risposte:


128

Questo e ciò che stai cercando:

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

la spiegazione è qui: espressione regolare per trovare una riga che non contiene una parola?


1
Questa è la risposta che mi aspetto! Grazie. Ho bisogno di un'espressione regolare piuttosto che di una funzione. La mia domanda è stata modificata e le risposte sono arrivate per rispondere alla nuova versione della mia domanda. Questo è il motivo per cui ho usato una parte "EDIT" per evitare confusione.
bxx

2
C'è una risposta che non corrisponde a una parola intera? Il tuo esempio "abc", "babc" e "abcd" fallisce e dove come "xyz" passa. Ho bisogno di "abc" per fallire ma "abcd" per passare. La rimozione di .e *sembra non funzionare
gman

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

1
Perché stai catturando nella tua regex?
Flimzy

Buon punto! Penso di aver pensato che se non acquisisco potrebbe significare ab (c | d) ef.
Petar Ivanov

1
Forse è meglio usare /abc|def/g.test(s)quel ritorno booleano in questo caso;)
grobouDu06

5

Ecco una soluzione pulita:

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/)è probabilmente più efficiente qui
SpliFF

Oppure ...return !string.match(...
McKayla

1
Un altro buon suggerimento ... voi ragazzi dovreste pubblicare le vostre risposte :)
Flimzy

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

0

Questo può essere fatto in 2 modi:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.