2017-03-20 20 views
0

Ich habe eine Regex, die ich verwende, um verschiedene Paare von geschweiften Klammern zu vergleichen, so dass ich sie während der Entwicklung kommentieren kann.RegEx, das mit geschweiften Klammern und führenden oder nachlaufenden Substr beginnt oder endet mit Anführungszeichen

Mein RegEx ist:

/{{.+_includes\s*}}|[^>\s]*{{\s*|\s*}}[^<\s]*|{%.+%}/g 

Und diese stimmt mit der Teilzeichen ich in # Zeichen eingewickelt haben:

1. #{{ #builtin_body_classes# }}# 

2. #"{{ #builtin_body_classes# }}# no-js" 

3. "no-js #{{ #builtin_body_classes# }}"# 

4. "no-js some-other-class #{{#builtin_body_classes#}}"# 

5. #{{standard_header_includes}}# 

6. #{{ standard_footer_includes }}# 

7. <title>#{{ #page_meta.html_title# }}#</title> 

8. #{% type_of_module "unique_module_name" parameterString='String parameter value', parmeterBoolean=True %}# 

Beachten Sie die Leerzeichen (zwei Räume) die vorlaufenden und nachlauf jede Zeile sind nicht abgestimmt und noch sind die Beispiel title Tags.

Dies funktioniert genau so, wie ich für alle außer zwei Fällen wollen - die Zeilen, die in Anführungszeichen (Fälle 2, 3 und 4) eingewickelt sind.

Für diese Fälle möchte ich die Anführungszeichen und Teilstrings, die die geschweiften Klammern führen oder hinterher führen, die auch in der Übereinstimmung enthalten sind, z.B.

2. #"{{ #builtin_body_classes# }} no-js"# 

3. #"no-js {{ #builtin_body_classes# }}"# 

4. #"no-js some-other-class {{#builtin_body_classes#}}"# 

Auch hier habe ich den Teil gewickelt Ich mag würde zwischen # Zeichen übereinstimmen.

würde sehr schätzen, dies zu erreichen helfen, und ich bin sicher, dass mein regex zu optimiert werden könnte ;-)

Antwort

0

ich jetzt das Problem gelöst habe. Meine regex ist:

/{{.+_includes\s*}}|(?:"+.*|[^>\s]*){{\s*|\s*}}(?:.*"+|[^<\s]*)|{%.+%}/g 

Sie können meine Streichhölzer unten und auch Leben zu http://regexr.com/3fijm

1. #{{ #builtin_body_classes# }}# 

2. #"{{ #builtin_body_classes# }} no-js"# 

3. #"no-js {{ #builtin_body_classes# }}"# 

4. #"no-js some-other-class {{#builtin_body_classes#}}"# 

5. #{{standard_header_includes}}# 

6. #{{ standard_footer_includes }}# 

7. <title>#{{ #page_meta.html_title# }}#</title> 

8. #{% type_of_module "unique_module_name" parameterString='String parameter value', parmeterBoolean=True %}# 

Wie ich in meiner ursprünglichen Frage gesagt sehen ich bin sicher, dass dieser regex optimiert oder verbessert werden könnte. Also Anregungen willkommen!

+0

Die Prämisse Ihrer Regex Teile (Alternationen) sind alle Linie basiert. Sie können keine Linien überspannen, aber sie können viele einzelne '}}' oder '{{' in einer Zeile enthalten. Ist das was du vorhast? Interessierst du dich um den Abschluss? – sln

+0

Danke für Ihren Kommentar! Ich bin nicht allzu besorgt darüber, mehrere Paare von geschweiften Klammern zu ersetzen. Aber ersetzen Sie im Idealfall nur das erste '{{' und das letzte '}}' (offensichtlich in Übereinstimmung mit meinen Wunschkriterien in den Beispielfällen). Dies würde helfen, Fehler während der Entwicklung hervorzuheben! –

Verwandte Themen