단어와 일치하지 않는 자바 스크립트 정규식


87

특정 단어와 일치하지 않는 문자열을 확인하기 위해 자바 스크립트 정규식을 어떻게 사용합니까?

예를 들어, 나도 포함 된 문자열을 전달하면 해당 함수 원하는 abc또는 deffalse를 반환합니다.

'abcd'-> 거짓

'cdef'-> 거짓

'bcd'-> 참

편집하다

가급적이면 [^ abc]와 같이 간단한 정규식을 원하지만 연속 된 문자가 필요하므로 예상 한 결과를 제공하지 않습니다.

예. 내가 원하는myregex

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

myregex.test('bcd')은로 평가됩니다 true.

답변:


124

이것은 당신이 찾고있는 것입니다 :

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

설명은 다음과 같습니다. 단어가 포함되지 않은 줄과 일치하는 정규식?


1
이것이 제가 기대하는 대답입니다! 감사. 함수가 아닌 정규식이 필요합니다. 내 질문이 수정되었고 내 질문의 새 버전에 대한 답변이 나왔습니다. 이것이 혼동을 피하기 위해 "EDIT"부분을 사용한 이유입니다.
bxx

2
전체 단어와 일치하지 않는 답변이 있습니까? 예제 "abc", "babc"및 "abcd"는 모두 실패하고 "xyz"가 통과하는 위치입니다. 실패하려면 "abc"가 필요하고 통과하려면 "abcd"가 필요합니다. 을 제거 .하고 *일을하지 않는 것
G 맨

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

1
정규식에서 캡처하는 이유는 무엇입니까?
Flimzy 2011-06-23

좋은 지적! 캡처하지 않으면 ab (c | d) ef를 의미 할 것이라고 생각했습니다.
Petar Ivanov

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/)여기에 아마 더 효율적이다
대단해

또는 ..return !string.match(...
McKayla 2011-06-23

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)) {
                        ....
                    } 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.