문제

문자열 A가 있고 다른 문자열 B가 그 일부가 아닌지 테스트하고 싶습니다. 이것은 나중에 그 결과를 뒤집을 수있는 매우 간단한 동정인입니다.

난 할 수 있습니다:

/foobar/.test('foobar@bar.de')

다음과 같이 나중에 반전시킵니다.

!(/foobar/).test('foobar@bar.de') 

내가 가진 문제는, 나는 그들의 결과가 아니라 정규 표현 내에서 그것을해야한다는 것입니다. 같은 것 :

/!foobar/.test('foobar@bar.de')

(작동하지 않음)

다시 말해, 정규 표현은 존재하지 않는 것을 테스트하고이 경우에 사실을 반환해야합니다.

JavaScript에서 가능합니까?

도움이 되었습니까?

해결책

노력하다:

/^(?!.*foobar)/.test('foobar@bar.de')

A (짧은) 설명 :

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

따라서 평범한 영어에서는 문자열 'foobar'가 "볼 수 있다면"이 regex가 문자열의 시작부터 볼 것입니다. 그것이 "볼 수 있다면"있다면있다 아니요* 성냥.

* 일치하지 않기 때문에 일치하지 않습니다 부정적인 봐!

이 외모에 대한 자세한 내용 : http://www.regular-expressions.info/lookaround.html 그러나 JavaScript는 외모 만 지원하며 외관은 없습니다.뒤에!

다른 팁

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

어떤 것도 포함하지 않는 문자열과 일치합니다. word1, word2, 또는 word3 (그리고 목록을 무기한으로 확장 할 수 있습니다). 그러나 이것은 또한 널 스트링과 일치합니다. 널 사용을 거부합니다

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

다음은 불평등의 예입니다. 먼저 연산자 '<', 나중에 피연산자 'a'및 'b'를 분리합니다. 기본적으로, 나는 직접적인 표현을 취하고, 오른쪽 괄호 안에 포함시키고, 후자를 '^'로 뒤집고, 마지막으로 '^'이 다르게 해석 될 것이기 때문에 결과적인 표현을 정사각형 괄호에 넣습니다.

var _str = "a < b" ;
var _op = /</g ;
var _no_op = /[^(<|\ )]/g ;
console.log( _str, _str.match( _op ) ); // get '<'
console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'

추신 : 피연산자의 정확한 일치를 검색하기 위해 반대 표현식에 빈 공간을 추가했습니다.

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

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

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top