2016-09-07 4 views
2

Arbeiten mit vim regexes zum Falten von HTML, versuchen, HTML-Tags zu ignorieren, die auf der gleichen Linie beginnen und enden.Vim Regex für html

Bisher habe ich

if line =~# '<\(\w\+\).*<\/\1>' 
    return '=' 
endif 

die für Tags wie <a></a> funktioniert gut, aber wenn sie mit benutzerdefinierten Elemente zu tun, ich laufe in Probleme, da es einen Bindestrich in der Tag-Name ist.

Wie zum Beispiel dieses Element

<paper-input label="Input label"></paper-input> 

Was in der Regex ändern muss, um auch den Bindestrich fangen?

+0

Was genau Sie hier übereinstimmen? Das klingt für mich nicht klar. –

+0

Entschuldigung, vielleicht würde ein Kern helfen. https://gist.github.com/mhartington/96c226aba980513489a9a6fa1d085ecf Die Regex sollte die Tags, die beginnt und endet auf der Beispiellinie – mhartington

Antwort

2

Die richtige regex (wegen this link aktualisiert) ist:

<\([^ >]\+\)[ >].*<\/\1> 

oder

<\([^ >]\+\)\>.*<\/\1> 

Diese [^ >] wichtig ist. Dies entspricht jedem Zeichen bis whitespace oder >, d. H. Es entspricht a und paper_input

+0

Wunderbar, danke! Interessant, danke für die Info! – mhartington

+0

@mhartinton Um ehrlich zu sein habe ich noch nie eine Rückwärtsreferenz im Suchmuster verwendet. Es scheint zu funktionieren, aber ich bin mir nicht sicher, ob dies der richtige Weg ist. –

+0

@mhartinton Ich analysierte es weiter und stellte eine Frage bezüglich der Rückreferenz: [hier] (http://stackoverflow.com/questions/39380964/vim-sed-regex-backreference-in-search-pattern). Diese Version: '<([^ >] +) [>]. * <\/\1>' wird sicherer sein. –