どのように私はJavaScriptで正規表現を反転することができますか?
-
20-09-2019 - |
質問
私は、文字列Aを持っているし、別の文字列Bはそれの一部ではないかどうかをテストします。これは非常にあります その結果、単純な正規表現は、その後反転させることができます。
私が行うことができます:
/foobar/.test('foobar@bar.de')
このような、後でそれを反転
!(/foobar/).test('foobar@bar.de')
私が持っている問題は、私は、正規表現の中ではなく、その結果でそれを行う必要があること、です。ような何かます:
/!foobar/.test('foobar@bar.de')
(動作しない)
つまり:正規表現は、非存在をテストし、その場合にはtrueを返す必要があります。
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に」が「見える」ことができる場合は、だから、平易な英語で、その正規表現は文字列の先頭から検索します。それは "見る" ことができる場合があるいいえ *試合ます。
*マッチしないことがありますので、の負のルックアヘッド!
この先読みのものについての詳細: 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'
P.s:私は、オペランドの正確なマッチングを取得するために、逆の表現に空白を追加しました。
あなたが探しているものを実際には「foobarに」のような単純な文字列よりも複雑ではない場合:
if (yourString.indexOf("foobar") === -1) {
// ...
}