文字列Aがあり、別の文字列Bがその一部ではないかどうかをテストしたい。これは非常に単純な正規表現であり、結果は後で逆にすることができます。
私はそれをできた:
/foobar/.test('[email protected]')
その後、次のように反転します。
!(/foobar/).test('[email protected]')
私が抱えている問題は、結果ではなく正規表現内でそれを行う必要があるということです。何かのようなもの:
/!foobar/.test('[email protected]')
(機能しません)
言い換えると、正規表現は存在しないことをテストし、その場合はtrueを返す必要があります。
これはJavaScriptで可能ですか?
試してください:
/^(?!.*foobar)/.test('[email protected]')
(短い)説明:
^ # 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」が「見える」場合、その正規表現は文字列の先頭から検索します。 「見える」場合はno *が一致します。
*negative先読みだから一致なし!
この先読みに関する詳細: http://www.regular-expressions.info/lookaround.html ただし、JavaScriptは先読みのみをサポートしており、look -behindsはサポートしていません=!
^(?!.*(Word1|Word2|Word3))
Word1
、Word2
、またはWord3
のいずれも含まない文字列に一致します(リストを無制限に拡張できます)。ただし、これはヌル文字列にも一致します。 nullsを拒否するには
^(?!$)(?!.*(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) {
// ...
}