2017-08-21 12 views
0

私は正規表現を書くつもりですが、いくつかの規則を一緒に連鎖させることはできません。私はそれがいくつかのルールに一致しないことを確認するために数値文字列を検証する必要があります。正規表現 - NOTに逆変換する方法

  1. はすべて同じ数字ここ

されていない4ゼロで終わらない3ゼロで開始しないで、私がしようとしている何をされています

は私がそれを必要としますこれまでのところ:

var re = new RegExp(/^(.)\1{8}$|^000|0000$/); 

re.test("111111111"); // true; all same digit 
re.test("000112222"); // true; starts with zeroes 
re.test("111110000"); // true; ends in zeroes 
re.test("123456789"); // false 
re.test("111223344"); // false 

これはfi TRUEを返すことで最初の3つの場合、3つの規則を満たさない限り、そのテストを偽にするにはどうすればよいですか?

+1

コンストラクタを使用するときは区切り文字を使用しないでください。 'new RegExp( '...')'または '/.../' – Toto

+0

あなたは*否定先読み*を使うことができます。 –

+1

@トート、なぜ説明できますか? – SoluableNonagon

答えて

5

が一緒にすべてのルールを置く(私はちょうど!とJSでそれを反転することができます知っている、私は正規表現のソリューションを探しています)、あなたはこの正規表現を使用することができます。

/^(?!0{3})(?!.*0{4}$)(\d)(?!\1*$)\d*$/gm 

RegEx Demo

正規表現の分裂:

^   # start 
(?!0{3}) # negative lookahead to assert failure when we have 3 0s at start 
(?!.*0{4}$) # negative lookahead to assert failure when we have 4 0s at end 
(\d)  # match a digit and capture in group #1 
(?!\1*$) # negative lookahead to assert we don't have same digit until end 
\d*   # match zero or more digits 
$   # end 
+1

異なる部分が何であるかを説明する価値があるかもしれないからです。 –

+0

もちろん、今追加しています。 – anubhava

+1

驚くばかり。助けてくれてありがとう – SoluableNonagon