2017-02-06 8 views
1

私は、C#で "123456"や "654321"のような連続した数字を検出する必要がある次のregexpを持っていますが、対応するjavascript regexp文字列に変換できません。Javascriptで対応するRegexp

string re = @"(?x) 
     ^
     # fail if... 
     (?! 
      # sequential ascending 
      (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5} \d $ 
      | 
      # sequential descending 
      (?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} \d $ 
     ) 
    "; 

は、私は、次のJavascriptをしようとしたが、常にtrueを返すようだ:JavaScriptの正規表現エンジンは、((?x)インライン修飾子で有効)空き領域(冗長)正規表現モードをサポートしていませんので

var re = new RegExp("^(?!(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5} \d $|(?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} \d $)"); 
var isMatch = re.test(str); 
+0

はJSでは、あなたは、より良い、特別な正規表現のメタ文字をエスケープするバックスラッシュの右側の数を選択するのトラブルを避けるために、正規表現リテラル表記を使用すると思います。 https://regex101.com/r/kNHkMn/2 –

+0

@WiktorStribiżew私はそれでも、 "123456"と "135468"の両方について真のテストをしています。 –

+0

'123456'は一致せず、' 135468'は正規表現に従って有効です。 http://regexstorm.net/tester –

答えて

1

あなたをパターンからすべての書式設定空白を削除する必要があります。すべてのスペースを削除し、私が述べたように

var re = /^(?!(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}\d$|(?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5}\d$)/;