Sublime/TextMate 言語ファイルでいくつかの構文強調表示の正規表現に取り組んでおり、非自己終了 html タグで「開始」し、それぞれの終了タグで終了する必要があります。
始める:
(<)([a-zA-Z0-9:.]+)[^/>]*(>)
終わり:
(</)(\2)([^>]*>)
これまでのところ、タグ名をキャプチャすることができ、タグ間の領域に適切なパターンを適用できるように一致しています。
jsx-tag-area:
begin: (<)([a-zA-Z0-9:.]+)[^/>]*>
beginCaptures:
'1': {name: punctuation.definition.tag.begin.jsx}
'2': {name: entity.name.tag.jsx}
end: (</)(\2)([^>]*>)
endCaptures:
'1': {name: punctuation.definition.tag.begin.jsx}
'2': {name: entity.name.tag.jsx}
'3': {name: punctuation.definition.tag.end.jsx}
name: jsx.tag-area.jsx
patterns:
- {include: '#jsx'}
- {include: '#jsx-evaluated-code'}
現在、開始タグで 0 個以上の html 属性をキャプチャして、それらを強調表示できるようにすることも検討しています。
したがって、タグが<div attr="Something" data-attr="test" data-foo>
attr
、data-attr
、および 、および とdata-foo
一致<
する可能性があります。div
のようなもの (これは非常に大雑把です):
(<)([a-zA-Z0-9:.]+)(?:\s(?:([0-9a-zA-Z_-]*=?))\s?)*)[^/>]*(>)
完璧である必要はありません。構文の強調表示のためだけですが、ルックアラウンドなどを使用する必要があるかどうか、タグ内で複数のキャプチャ グループを実現する方法を理解するのに苦労していました。単一の式でも可能です。
編集:特定のケース/質問の詳細は次のとおりです-https: //github.com/reactjs/sublime-react/issues/18