根据TextMate中的属性修改HTML语法

时间:2011-04-07 08:56:53

标签: html regex textmate grammar

我最近开始尝试使用jQuery模板,这依赖于您在SCRIPT标记内包装HTML的能力。

<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(?![^>]*/>)';

有没有人已经处理过类似的情况?有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:6)

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

将停止使用“text / x-jquery-tmpl”将脚本标记视为javascript

答案 1 :(得分:2)

这是一个正则表达式。您可以对其进行扩展,以检查类似text/javascript的类型:

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

我只用if测试了它,但它似乎有效。当类型为text/javascript时,TextMate会将其扩展为Javascript以用于其使用PHP的其他每种类型。 (就像脚本标签之外的那样。)

您可以在此处详细了解TextMate如何使用正则表达式:Regex (TextMate Manual)

答案 2 :(得分:1)

匹配组是有意义的。您需要将其更改为:

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

为了保持当前的匹配组配置。