2017-05-10 1 views
0

Ich versuche, Code-Zeilen zu entsprechen,
mein Problem ist, Kommentare zu ignorieren (Linien diese beginnen mit slash- /)Wie können nur die Zeilen entsprechen, die nicht mit startet

Zum Beispiel:

/(\w+)(?:\s|\t)(?:\=)(?:\s|\t)+/g 

Auf dieser Zeichenfolge:

test1 = "b" test2 = "d" // test3 = "DSF"

Shoul d zurück:

test1 
test2 

Mein aktueller Muster, natürlich kehrt:

test1 
test2 
test3 

Ich bin mir dessen bewusst (?<!, sondern weil ich mit Javascript bin es nicht für mich arbeiten. über (?! Ich glaube, es ist nicht für die gleiche Nutzung (mich beheben, wenn ich falsch liege)

+0

Wäre es nicht möglich, die Eingabe Zeile für Zeile zu betrachten und nach Zeilen zu suchen, die nicht mit den Kommentaren übereinstimmen? Nur wenige Regex-Engines unterstützen "inverse Matches". Von der Spitze meines Kopfes tun weder Python noch C# s. –

+1

Codezeilen sind keine reguläre Sprache. Reguläre Ausdrücke sind eine schlechte Wahl, um sie zu parsen. Ziehen Sie stattdessen den Aufbau eines echten Parsers in Betracht - es könnte einschüchternder sein, aber es wird sicherlich weniger stressig sein, als alle Randfälle zu untersuchen, wie zum Beispiel "test1 =" wird es brechen? // Vielleicht. "' –

Antwort

0

Sie könnten Verwenden Sie die ^ als Start-of-Line-Anker (mit m Modifikator), und indem Sie am Anfang der Zeile \w erfordert, wird die Zeile nicht übereinstimmen. Sie könnten noch einigen Leerraum am Anfang der Zeile erlauben:

^\s*(\w+)\s*\= 

NB: \t bereits von \s abgestimmt ist, so gibt es keine Notwendigkeit \s|\t zu tun.

0
output=input.split("\n").map(line=>line.split("//")[0]); 

Wir kommen wieder:

['test1="b"','test2="d"'] 

Dann können Sie weiter gehen ...

Verwandte Themen