регулярное выражение 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.

Ответы:


125

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

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

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


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);
}

1
function test(string) {
    return ! string.match(/abc|def/);
}

1
string.match(/abc|def/)здесь, наверное, более эффективно
SpliFF

Или ..return !string.match(...
McKayla

1
Еще одно хорошее предложение ... вы, ребята, должны публиковать свои собственные ответы :)
Flimzy


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.