どのように私はJavaScriptで正規表現を反転することができますか?

StackOverflow https://stackoverflow.com/questions/1538512

  •  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))

word1word2、または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) {
  // ...
}

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top