Каково регулярное выражение для захвата чего-то, окруженного звездочками внутри комментария?

Я пытаюсь изменить существующее определение языка, которое определяет комментарии следующим образом:

    <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>
Другие вопросы по тегам