2016-08-09 88 views
-2

Ich versuche, durch eine Fontäne (Screenwriting) Markup-Datei zu analysieren und schreiben Sie eine Syntax-Highlighting-Muster für Prism.js.RegEx: übereinstimmende zwei Zeilenumbrüche nach bestimmten Block

ich brauchen würde, um so etwas passen (Zeilenumbrüche für Klarheit enthalten)

\n 
CHARACTER\n 
(possible parenthetical line)\n 
Dialogue, dialogue blah blah.\n 
\n 

Von Brunnen Ressourcen zog ich diesen Ausdruck, die sehr schön die erste Zeile übereinstimmt.

(\n)([ \t]*[^<>a-z\s\/\n][^<>a-z:!\?\n]*[^<>a-z\(!\?:,\n\.][ \t]?)\n{1}(?!\n) 

Ich habe eine Menge Dinge ausprobiert, aber kann nicht scheinen, um ein Muster zu finden, das den gesamten Textblock, einschließlich optionaler klammerten Linien, bis die beiden Zeilenumbrüche passen würde.

Kann mir jemand helfen, das richtige Muster zu finden? Regexe töten mein inneres Kind.

UPDATE: Das war einfacher als ich dachte. Das Fehlen von Lookbehind in JavaScript macht mir immer noch weh, aber das ist eine ganz andere Geschichte.

([ \t]*[^<>a-z\s\/\n][^<>a-z:!\?\n]*[^<>a-z(!\?:,\n\.][ \t]?)\n(.*(\n))?.*(\n\n) 
+3

* Kann mir jemand helfen, das richtige Muster zu finden? * Sie es selbst bei schneller aufbauen können [regex101] (http://regex101.com). –

Antwort

0

Try this:

((\n){1}(([ \t]*([A-Za-z0-9 ])+[ \t]?)(\n){1}){1}(([ \t]*(\()*([A-Za-z0-9 ])*(\))*[ \t]?){1}(\n){1})?([ \t]*([A-Za-z0-9.,-_ ])+[ \t]?){1}(\n){1}){1} 

Ein Zusammenbruch des obigen Code:

(\n){1}-1 neue Zeile am Anfang des Blocks ist ein Muss

(([ \t]*([A-Za-z0-9 ])+[ \t]?)(\n){1}){1} - ein Linie mit alphanumerischen Zeichen und Leerzeichen. Die Linie kann am Ende mit Tabulatoren und Leerzeichen umwickelt werden. Eine neue Zeile am Ende ist ein Muss.

(([ \t]*(\()*([A-Za-z0-9 ])*(\))*[ \t]?){1}(\n){1})? - eine Zeile mit alphanumerischen Zeichen und Leerzeichen. Es kann mit Tabs und Klammern umwickelt werden; und Leerzeichen können auch am Ende enthalten sein. Eine neue Zeile am Ende ist ein Muss.

([ \t]*([A-Za-z0-9.,-_ ])+[ \t]?){1}(\n){1} - eine Zeile mit alphanumerischen Zeichen. Es kann auch Kommas, Punkte, Bindestriche und Unterbewertungen enthalten. Dieser Block kann auch in Registerkarten mit Leerzeichen am Ende eingeschlossen werden. Eine neue Zeile am Ende ist ein Muss.

Dies sollte funktionieren. Wenn mir einige Anforderungen fehlen, nur kommentieren und ich werde versuchen, wenn möglich zu helfen.

Cheers, Mustafa

+0

Danke - obwohl dies nur zweizeilige Blöcke entspricht. Diese etwas funktioniert, eigentlich: ([\ t] * [^ <> az \ s \/\ n] [^ <> az:! \? \ N] * [^ <> az \ (! \? :, \ n \.] [\ t]?) \ n (. * (\ n))?. * (\ n \ n) – Tritonal

+0

hey Tritonal - das ist merkwürdig, für mich war es eine ganze Zeile und drei Zeilen Ich kann die von Ihnen gepostete Regex nicht sortieren, vielleicht kann jemand anderes dabei helfen. Ich kann Ihnen mit dem, den ich gepostet habe, helfen. Sie formatieren Ihre Blöcke genau so, wie Sie in Ihrer obigen Frage geschrieben haben meine Regex testen? – MustafaG