Regex 正则表达式以匹配类型为“=”的仅HTML脚本标记;text/javascript“;

Regex 正则表达式以匹配类型为“=”的仅HTML脚本标记;text/javascript“;,regex,textmate,sublimetext2,Regex,Textmate,Sublimetext2,我正在使用一个主干应用程序的模板,这些模板存储在元素中的HTML中,但这变得令人沮丧,因为升华文本将模板中的HTML着色为Javascript。我想让编辑器考虑这些脚本标签和普通HTML标签一样。 我曾尝试在html.tmLanguage上修改source.js.embedded.html块中的正则表达式,但作为一个对正则表达式缺乏经验的人,我无法正确使用它 有什么想法吗 我认为,这是tmLanguage文件中需要修改的相关部分: <key>begin

我正在使用一个主干应用程序的模板,这些模板存储在
元素中的HTML中,但这变得令人沮丧,因为升华文本将模板中的HTML着色为Javascript。我想让编辑器考虑这些脚本标签和普通HTML标签一样。

我曾尝试在html.tmLanguage上修改source.js.embedded.html块中的正则表达式,但作为一个对正则表达式缺乏经验的人,我无法正确使用它

有什么想法吗

我认为,这是tmLanguage文件中需要修改的相关部分:

                <key>begin</key>
                <string>(?&lt;!&lt;/(?:script|SCRIPT))(&gt;)</string>
                <key>captures</key>
                <dict>
                    <key>1</key>
                    <dict>
                        <key>name</key>
                        <string>punctuation.definition.tag.html</string>
                    </dict>
                    <key>2</key>
                    <dict>
                        <key>name</key>
                        <string>entity.name.tag.script.html</string>
                    </dict>
                </dict>
                <key>end</key>
                <string>(&lt;/)((?i:script))</string>
开始
(?!/(?:脚本|脚本))()
捕获
1.
名称
标点符号.definition.tag.html
2.
名称
entity.name.tag.script.html
结束
(/)((?i:脚本))

我认为您应该编辑其他值:

        <key>begin</key>
        <string>(?:^\s+)?(&lt;)((?i:script))\b(?![^&gt;]*/&gt;)</string>
        <key>beginCaptures</key>
        <dict>
            <key>1</key>
            <dict>
                <key>name</key>
                <string>punctuation.definition.tag.html</string>
            </dict>
            <key>2</key>
            <dict>
                <key>name</key>
                <string>entity.name.tag.script.html</string>
            </dict>
        </dict>
开始
(?:^\s+)((?:脚本))\b(?![^]*/)
开始接受
1.
名称
标点符号.definition.tag.html
2.
名称
entity.name.tag.script.html
并替换
(?:^\s+)((?i:script))\b(?![^]*/)


使用
(?:^\s+)((?i:script))\b(?![^]*/)(?![^]*type=“text/template”)

我认为您应该编辑其他值:

        <key>begin</key>
        <string>(?:^\s+)?(&lt;)((?i:script))\b(?![^&gt;]*/&gt;)</string>
        <key>beginCaptures</key>
        <dict>
            <key>1</key>
            <dict>
                <key>name</key>
                <string>punctuation.definition.tag.html</string>
            </dict>
            <key>2</key>
            <dict>
                <key>name</key>
                <string>entity.name.tag.script.html</string>
            </dict>
        </dict>
开始
(?:^\s+)((?:脚本))\b(?![^]*/)
开始接受
1.
名称
标点符号.definition.tag.html
2.
名称
entity.name.tag.script.html
并替换
(?:^\s+)((?i:script))\b(?![^]*/)


使用
(?:^\s+)((?:脚本))\b(?![^]*/)(?![^]*type=“text/template”)

谢谢!这是因为整个原始正则表达式是一个零宽度的前瞻,所以它后面可以跟着另一个仍然会搜索整个字符串的前瞻?你几乎是对的。但是整个正则表达式不是零宽度断言,只有这一部分-
(?![^]*/)
,下一个前瞻断言将从与它相同的位置进行搜索。谢谢!这是因为整个原始正则表达式是一个零宽度的前瞻,所以它后面可以跟着另一个仍然会搜索整个字符串的前瞻?你几乎是对的。但是整个正则表达式不是零宽度断言,只有这一部分-
(?![^]*/)
,下一个前瞻断言将从与它相同的位置进行搜索。