2016-11-26 3 views
0

Ich versuche zu finden, wenn eine gegebene Ziffernfolge eine Folge von drei identischen Ziffern enthält.Javascript - Verwenden von verketteten String in Regex

einer for-Schleife, jede Ziffer im String erhält eine eigene Darstellung einer Ziffernfolge drei, die dann gegen die Saite geprüft Regex mit:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re).length == 1) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 

Das Ergebnis sollte sieben sein (wenn ich 777 setzen in seqToCompare würde es funktionieren), aber es sieht so aus, als ob die Verkettung dazu führt, dass es fehlschlägt. Die Konsole zeigt an, dass die Eigenschaft length für null nicht gelesen werden kann.

Sie können es hier testen - https://jsfiddle.net/kwnL7vLs/

Ich versuchte .toString, seqToCompare in Regex-Format einstellen und es sogar als int Parsen (aus Verzweiflung nicht zu wissen, was mehr zu tun ...)

+0

Wenn das Spiel ausfällt, ist das Ergebnis 'null' und bei der ersten Iteration, wird das Spiel nicht. – vlaz

+0

Danke! Ich war mir sicher, dass es ** 0 ** anstatt ** null ** zurückgegeben hat, weil ein Vergleich stattgefunden hat. –

Antwort

3

anstatt über jedes Zeichen Looping, können Sie eine einfache Regex verwenden, um eine Stelle zu bekommen, die 3-mal wiederholt wird:

/(\d)(?=\1{2})/ 
  • (\d) - Hier passen wir eine Ziffer und Gruppe in erfassten Gruppe # 1
  • (?=\1{2}) ist Look-Ahead, die gleiche erfassten Gruppe # 1 behauptet wird zweimal wiederholt vor der aktuellen Position

RegEx Demo

+0

@NiviM Hat das geklappt? – anubhava

0

anubhava Antwort ist der Weg zu gehen, wie es ist mehr effizient und einfacher. Wenn Sie sich jedoch fragen, warum Ihr Code speziell einen Fehler anzeigt, liegt das daran, dass Sie versuchen, die length Eigenschaft des Rückgabewerts str.match() zu finden, auch wenn keine Übereinstimmung gefunden wird.

Versuchen Sie stattdessen:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re)) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 
Verwandte Themen