expression régulière javascript pour ne pas correspondre à un mot

87

Comment utiliser une expression régulière javascript pour vérifier une chaîne qui ne correspond pas à certains mots?

Par exemple, je veux une fonction qui, lorsqu'elle est passée une chaîne qui contient soit abcou def, retourne false.

'abcd' -> faux

'cdef' -> faux

'bcd' -> vrai

ÉDITER

De préférence, je veux une expression régulière aussi simple que quelque chose comme [^ abc], mais elle ne donne pas le résultat attendu car j'ai besoin de lettres consécutives.

par exemple. Je voudraismyregex

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

L'instruction myregex.test('bcd')est évaluée à true.

bxx
la source

Réponses:

124

Voici ce que vous recherchez:

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

l'explication est ici: Expression régulière pour correspondre à une ligne qui ne contient pas de mot?

ssgao
la source
1
C'est la réponse que j'attends! Merci. J'ai besoin d'une expression régulière plutôt que d'une fonction. Ma question a été modifiée et des réponses ont été apportées pour répondre à la nouvelle version de ma question. C'est pourquoi j'ai utilisé une partie "EDIT" pour éviter toute confusion.
bxx
2
Y a-t-il une réponse qui ne correspond pas à un mot entier? Votre exemple "abc", "babc" et "abcd" échouent tous et où "xyz" passe. J'ai besoin de "abc" pour échouer mais "abcd" pour réussir. Suppression du .et *ne semble pas fonctionner
gman
18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}
Petar Ivanov
la source
1
Pourquoi capturez-vous dans votre regex?
Flimzy
Bon point! Je pense que je pensais que si je ne capturais pas, cela pourrait signifier ab (c | d) ef.
Petar Ivanov le
1
Il est peut-être préférable d'utiliser /abc|def/g.test(s)ce retour booléen dans ce cas;)
538ROMEO
5

Voici une solution propre:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}
NoBrainer
la source
1
function test(string) {
    return ! string.match(/abc|def/);
}
Flimzy
la source
1
string.match(/abc|def/)est probablement plus efficace ici
SpliFF
Ou ..return !string.match(...
McKayla
1
Une autre bonne suggestion ... vous devriez publier vos propres réponses :)
Flimzy
0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}
Bemmu
la source
0

Cela peut être fait de 2 manières:

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


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