Каково регулярное выражение для захвата чего-то, окруженного звездочками внутри комментария?
Я пытаюсь изменить существующее определение языка, которое определяет комментарии следующим образом:
<dict>
<key>match</key>
<string>(#) .*$\n?</string>
<key>name</key>
<string>comment.line.number-sign.myLanguage</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.myLanguage</string>
</dict>
</dict>
</dict>
Это гарантирует, что строка, начинающаяся с #
будет определен как комментарий и выделен соответствующим образом. То, что я хотел бы сделать, это окружить закомментированное слово в звездочках и показать его как что-то другое, keyword
например. Но просто добавить это не работает:
<dict>
<key>match</key>
<string>\*([^*]+)\*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.myLanguage</string>
</dict>
</dict>
</dict>
Тем не менее, это работает, если строка не начинается с #
поэтому я предполагаю, что существует конфликт между обоими правилами. Итак, я думал, что смогу обойти это, используя регулярное выражение, которое идентифицирует все в комментарии, который не окружен *
, что-то вроде:
# This is a comment *this is something else* this is still a comment *not* yes
Есть идеи?
1 ответ
Решение
Хорошо, я получил это на работу:
<dict>
<key>begin</key>
<string>(#) .*</string>
<key>name</key>
<string>comment.line.number-sign.myLanguage</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.myLanguage</string>
</dict>
<key>0</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>keyword.myLanguage</string>
<key>match</key>
<string>\*[^*]+\*</string>
</dict>
</array>
</dict>
</dict>
<key>end</key>
<string>$\n?</string>