регулярное выражение javascript, чтобы слово не соответствовало

87

Как использовать регулярное выражение javascript для проверки строки, не соответствующей определенным словам?

Например, мне нужна функция, которая при передаче строки, содержащей либо abcили def, возвращает false.

'abcd' -> ложь

'cdef' -> ложь

'bcd' -> истина

РЕДАКТИРОВАТЬ

Желательно, чтобы регулярное выражение было таким простым, как что-то вроде [^ abc], но оно не дает ожидаемого результата, поскольку мне нужны последовательные буквы.

например. я хочуmyregex

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

Заявление myregex.test('bcd')оценивается как true.

bxx
источник

Ответы:

125

Это то, что вы ищете:

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

объяснение здесь: регулярное выражение для строки, которая не содержит слова?

ssgao
источник
1
Я ожидаю этого ответа! Спасибо. Мне нужно регулярное выражение, а не функция. Мой вопрос отредактировали и пришли ответы на новую версию моего вопроса. Вот почему я использовал часть «ИЗМЕНИТЬ», чтобы избежать путаницы.
bxx
2
Есть ли ответ, который не соответствует целому слову? В вашем примере «abc», «babc» и «abcd» все терпят неудачу, а где «xyz» проходит. Мне нужно «abc», чтобы пройти, но «abcd», чтобы пройти. Удаление .и *, похоже, не работает
gman 02
18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}
Петар Иванов
источник
1
Почему вы захватываете свое регулярное выражение?
Flimzy
Хорошая точка зрения! Думаю, если я не пойму, это может означать ab (c | d) ef.
Петар Иванов
1
Возможно, /abc|def/g.test(s)в этом случае лучше использовать возвращающее логическое значение;)
538ROMEO
5

Вот чистое решение:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}
NoBrainer
источник
1
function test(string) {
    return ! string.match(/abc|def/);
}
Flimzy
источник
1
string.match(/abc|def/)здесь, наверное, более эффективно
SpliFF
Или ..return !string.match(...
McKayla
1
Еще одно хорошее предложение ... вы, ребята, должны публиковать свои собственные ответы :)
Flimzy
0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}
Бемму
источник
0

Это можно сделать двумя способами:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Гириш Гупта
источник