2017-02-06 5 views
1

Ich habe die folgenden Regexp, die sequenzielle Ziffern wie "123456" oder "654321" in C# erkennen, aber nicht in die entsprechende Javascript regexp Zeichenfolge konvertieren kann.Korrespondierende Regexp In Javascript

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 $ 
     ) 
    "; 

Ich habe versucht, die folgende Javascript, aber es scheint immer wahr zurück:

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

Wie ich bereits erwähnt, entfernen Sie alle Leerzeichen. https://regex101.com/r/kNHkMn/2 –

+0

@ WiktorStribiżew Ich tat, aber es testet immer noch wahr für beide "123456" und "135468". –

+0

'123456' stimmt nicht überein, und' 135468' sieht nach der Regex-Datei aus. Die gleichen Ergebnisse erhalten Sie unter http://regexstorm.net/tester –

Antwort

1

Da der JavaScript Regex-Engine ist nicht freien Speicherplatz (ausführlich) regex Modus (aktiviert mit dem (?x) Inline-Modifikator) unterstützen müssen alle Formatierungs-Leerzeichen aus dem Muster entfernen.

In JS, sollten Sie besser einen regulären Ausdruck wörtliche Notation verwenden, um die Mühe der Wahl der richtigen Anzahl der Schrägstriche zu vermeiden spezielle Regex Metazeichen zu entkommen:

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$)/;