2016-09-19 7 views
0

ich möchte um Hilfe erhalten mit einem Regex Spiel in JavaScript zu machenSpiel nur, wenn Bedingungen erfüllt sind


Spiel die Anzahl nur:

  • Wenn die Reihe (Odd) hat eine Nummer größer als 25 UND die Zeile nach (gerade) hat das Wort "A pples "drin.
    • Erklärung:
      • Die erste Wert der Reihe (29) gehört zur zweiten Reihe ("First | Cocoa Äpfel sind")
      • Die dritte Wert der Reihe (23) an die vierte Zeile ("Zweiter | Test Text") ... und so weiter ...

Der Text werde ich es mit verwenden:

29% OK 
First | Cocoa Apples are 
23% NOT 
Second | Test Text 
18% NOT 
Third | Mango Alpa Tango 
16% NOT 
Fourth | Apples are 
33% OK 
Fifth | Text Testing App 
10% NOT 
Sixth | Apples are Gold Duck 
28% OK 
Seventh | Alpa Apples are Tango 
66% OK 
Eighth | Oh My Apples are Avocado 
20% NOT 
Ninth | This Is My Text 
25% NOT 
Tenth | This Is Hard 
+0

Ich bezweifle, dass jeder Regex Geschmack Zahlen wie das vergleichen kann .. – Stefan

+0

Und was möchten Sie als ein Spiel bekommen? Nur die Nummer? Erster Satz oder der zweite? Oder beides? –

+0

@Stefan ist es möglich –

Antwort

2

Try this:

/(2[5-9]|[3-9][0-9])%(?=.*\n.*Apples)/g 
+0

Danke! Ich werde es ausprobieren. – Enryu

1

Nicht sicher einem regulären Ausdruck, aber ich denke, das folgende macht eine ziemlich gute Arbeit mit dem Finden der Zahlen und lin es:

var str = `29% OK 
 
First | Cocoa Apples are 
 
23% NOT 
 
Second | Test Text 
 
18% NOT 
 
Third | Mango Alpa Tango 
 
16% NOT 
 
Fourth | Apples are 
 
33% OK 
 
Fifth | Text Testing App 
 
10% NOT 
 
Sixth | Apples are Gold Duck 
 
28% OK 
 
Seventh | Alpa Apples are Tango 
 
66% OK 
 
Eighth | Oh My Apples are Avocado 
 
20% NOT 
 
Ninth | This Is My Text 
 
25% NOT 
 
Tenth | This Is Hard`; 
 

 

 
var bigger = false; 
 
str.split("\n").forEach(function(row, i) { 
 
    if (i % 2 == 0 && parseInt(row.replace(/\\D/g, ""), 10) >= 25) { 
 
     bigger = true;  
 
    } else { 
 
    if (bigger) { 
 
     bigger = false; 
 
     if (row.indexOf("Apples") > -1) { 
 
     console.log("match in line " + i); 
 
     } 
 
    } 
 
    } 
 
});

+0

Danke, aber ich brauchte es in Regex.Preciate die Hilfe obwohl! – Enryu

1

Hier sollte es als Ihr Antrag

^(?:(?:.*\n){2})*?((?:2[6-9]|[3-9][0-9]|100)).*\n.*Apples 

Erläuterungen

^(?:(?:.*\n){2})*? Spiel Null-Linie oder geraden Anzahl von Linien arbeiten,

((?:2[6-9]|[3-9][0-9]|100)) Gruppennummer der Prozentsatz, der größer als 25 zu variable \1,

.*\n.*Apples Einstimmungsleitung, die das Wort "Apples" hat. siehe

, DEMO

Beachten Sie, dass wegen einer Beschränkung von Lookbehind in Javascript, es ist viel mehr Komfort Anzahl der Prozentsatz zu erfassen, als es nur anzeigen lassen.

Einige einfacher Weise

(?:2[6-9]|[3-9][0-9]|100)(?=.*\n.*Apples) 

Ich denke, dass dieser Ansatz einfacher als die erste ist, weil man mit einer solchen Phantasie Wörter wie „ungerade“ umgehen müssen oder „auch“ nicht.

sehen, DEMO

+0

@Enryu Ich habe etwas Bearbeitung gemacht, bitte überprüfen Sie die Demo. – fronthem

+0

Dies ist nicht "ganz" was ich wollte, da es übereinstimmt, wenn eine meiner Bedingungen zutrifft (I. 25 Enryu

+0

OK, ich bin fertig, bitte überprüfen Sie noch einmal. – fronthem

1

Verwenden

(2[5-9]|[3-9][0-9]|100)%.*\n.*Apples.* 

, wenn Sie den gesamten Text erfassen müssen.

+0

Danke! Jemand war schneller (und ich brauchte nur den Zahlenwert (Entschuldigung, dass ich es nicht angegeben habe)), aber ich schätze die Hilfe! – Enryu

Verwandte Themen