JavaScript에서 정규 표현을 어떻게 반전 할 수 있습니까?
-
20-09-2019 - |
문제
문자열 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) {
// ...
}