2017-09-06 2 views
1

Ich möchte Dateipfad mit Schluck Aufgabe ersetzen. Dazu muss ich eine Regex schreiben:JavaScript Regex zum Überschreiben des Dateipfads

Ich habe eine Ordnerstruktur ../assets/js/components/main/main.component.html, wo ich den gesamten Pfad, ../assets/js/components/**/, mit einer leeren Zeichenfolge ersetzen muss. So nach einem Regex auf meinem Beispiel Anwendung soll ich nur die HTML-Datei erhalten, z.B .: main.component.html

Die Regex sollten nur den Pfad ../assets/js/components/ mit nur einer Ebene von Unterordner entsprechen, z.B .: ../assets/js/components/**/. Weg mit nur ../assets/js/components/ sollte nicht übereinstimmen und den Pfad mit mehr als einem Unterordner weder ../assets/js/components/main/shouldnotmatch/

Ich schrieb bereits ein Regex:

^..\/assets\/js\/components\/(?:\[^\/\]+\/?)*$

Das Problem hier ist, dass es alles auswählt. Irgendeine Idee, wie man das repariert?

EDIT:

Weitere Beispiele:

../assets/js/components/main/ => ../assets/js/components/main/ ../assets/js/components/ => should not match ../assets/js/components/test/index.html => ../assets/js/components/test/ ../assets/js/components/main/shouldnotmatch/shouldnotmatch.html => ../assets/js/components/main/ ../assets/js/components/some_components.html => should not match ../assets/js/components/1.html => should not match

+0

Als erstes müssen Sie fliehen müssen '.' – Rajesh

+0

Beachten Sie, dass Sie verwenden können,'^\ \ \../assets \/js \/components \/([^ \ /] + \ /?) $ 'und vergewissere dich, dass du innerhalb des Codes auf den Wert der Gruppe 1 verweisst. Beachten Sie, dass Sie in Ihrer Demo '\ n' in' [^ \ /] '' einfügen müssen, um eine Übereinstimmung zwischen den Zeilen zu vermeiden. Siehe https: // regex101.com/r/PbCnXa/1 –

+0

@ WiktorStribiżew, aber dann wählt es nur die erste. Es sollte '../ assets/js/components/** /' überall auswählen. – Gabriel

Antwort

1

Es scheint, wollen Sie vermeiden Dateien passende HMTL/HTM, wenn an der Stelle des subfolder verwendet.

Sie können einen Look-Ahead verwenden, um diese Einschränkung zu addieren und

^\.\.\/assets\/js\/components\/(?![^\/]+\.html?$)[^\/]+\/? 

Siehe regex demo

Einzelheiten

  • ^ verwenden - Beginn der Zeichenfolge
  • \.\.-2 Punkte
  • \/assets\/js\/components\/ - eine Zeichenkette /assets/js/components/
  • (?![^\/]+\.html?$) - unmittelbar links von der aktuellen Position, kann es nicht sein:
    • [^\/]+ - 1 oder mehr Zeichen andere als /
    • \.html? - .html oder htm
    • $ - am Ende des Strings
  • [^\/]+-1 oder mehr Zeichen andere als /
  • \/?-1 oder 0 / s
Verwandte Themen