2009-10-08 5 views
33

문자열 A가 있고 다른 문자열 B가 해당 문자열의 일부가 아닌지 테스트하려고합니다. 이것은 결과가 뒤바뀔 수있는 매우 정규식 인 입니다. 이 같은JavaScript에서 정규식을 어떻게 반전시킬 수 있습니까?

/foobar/.test('[email protected]') 

을하고 나중에 그것을 반전 :

내가 할 수있는

!(/foobar/).test('[email protected]') 

내가 가진 문제를 내가 함께 정규 표현식 내에서 그것을하지 필요가, 그들의 결과. 즉

/!foobar/.test('[email protected]') 

(작동하지 않는)

: 같은 뭔가 정규 표현식이 아닌 존재 여부를 테스트하고 그 경우에 true를 반환해야합니다.

JavaScript로 가능합니까?

답변

44

시도 :

/^(?!.*foobar)/.test('[email protected]') 

A (짧은) 설명 : 문자열 '는 foobar'가 될 수 있다면

^   # start of the string 
(?!  # start negative look-ahead 
    .*  # zero or more characters of any kind (except line terminators) 
    foobar # foobar 
)   # end negative look-ahead 

그래서, 일반 영어, 그 정규 표현식은 문자열의 시작부터 볼 것이다 "본". "볼 수"있는 경우 아니요 *과 일치합니다.

* 일치하지 않으므로 네이티브 앞선!

look-ahead stuff에 대한 추가 정보 : http://www.regular-expressions.info/lookaround.html 그러나 JavaScript는 look-aheads 만 지원합니다. look-behinds!

+0

니스 - 설명해 주시겠습니까? – jantimon

+0

Thx 본 적이 없습니까?! 전에. 위대한 대답 – jantimon

+0

위대한, 이것은 정확히 내가 필요로했다. 이전에 자바 스크립트에서 부정적 예측을 시도하지 않았습니다. 고마워요! – acme

0

당신이 정말로 검색하는 것은 "는 foobar"와 같은 간단한 문자열보다 복잡하지 않은 경우 :

if (yourString.indexOf("foobar") === -1) { 
    // ... 
} 

http://www.w3schools.com/jsref/jsref_indexOf.asp

+0

감사합니다,하지만 정규 표현식이 필요합니다. 예제를 약간 단순화했습니다. – acme

+0

또는 yourString.includes ("foobar") :) – rogerdpack

0
^(?!.*(word1|word2|word3)) 

어떤을 포함하지 않는 문자열을 일치합니다 word1, word2 또는 word3 (목록을 무기한 확장 할 수 있음) 그러나이 또한 null 문자열과 일치합니다. null을 거부하려면 다음을 사용하십시오.

^(?!$)(?!.*(word1|word2|word3)) 
1

다음은 부등식의 예입니다. 먼저 연산자 '<'을 분리하고 나중에 피연산자 'a'와 'b'를 분리합니다. 기본적으로 직접 식을 취해 오른쪽 괄호에 넣고 후행을 '^'로 바꾸고 결과 식을 대괄호로 포함시킵니다. '^'는 처음에 '^'이 다르게 해석되기 때문입니다.

P.s .: 피연산자에 대한 정확한 일치를 검색하기 위해 역함수에 공백을 추가했습니다.

관련 문제