Подтвердить что ты не робот

Изменить грамматику HTML на основе атрибутов в TextMate

Недавно я начал экспериментировать с шаблонами jQuery, которые полагаются на вашу способность обернуть HTML в теги SCRIPT.

<script id="movieTemplate" type="text/x-jquery-tmpl">
    <li>
        <b>${Name}</b> (${ReleaseYear})
    </li>
</script>

Проблема заключается в том, что TextMate, естественно, предполагает, что все теги SCRIPT - это JavaScript. Я уверен, что TextMate может обрабатывать контент по-разному на основе атрибута type, но я борюсь с некоторыми из грамматики, используемой в комплекте. Я довольно уверен, что строка ниже - ключ, но я не уверен, с чего начать.

begin = '(?:^\s+)?(<)((?i:script))\b(?![^>]*/>)';

Кто-нибудь уже имел дело с подобным сценарием? Кто-нибудь сможет указать мне в правильном направлении?

Рич

4b9b3361

Ответ 1

begin = '(?:^\s+)?(<)((?i:script))\b(?!([^>]*text/x-jquery-tmpl[^>]*|[^>]*/>))';

перестает обрабатывать теги script с помощью "text/x-jquery-tmpl" в них как javascript

Ответ 2

Это регулярное выражение. Вы можете расширить его, чтобы проверить тип text/javascript следующим образом:

begin = '(?:^\s+)?(<)((?i:script))\b(.*?type="text/javascript")(?![^>]*/>.*)';

Я тестировал его только с помощью if, но, похоже, он работает. Когда тип text/javascript TextMate расширяет его до Javascript для каждого другого типа, он использует PHP. (Так же, как вне тегов script.)

Вы можете узнать больше о том, как TextMate использует регулярные выражения здесь: Regex (Руководство по TextMate)

Ответ 3

Соответствующие группы имеют смысл. Вам нужно изменить его на это:

begin = '(?:^\s+)?(<)((?i:script))\b(?:.*?type="text/javascript")(?![^>]*/>)';

Чтобы сохранить текущую конфигурацию соответствующей группы.