1

我正在使用 Prettify.JS 在我正在开发的网站上显示一些代码。我似乎对脚本标签有一些问题,尤其是“非链接”标签:

<pre>
// Link CSS
&lt;link rel=&quot;stylesheet&quot; href=&quot;device.css&quot; /&gt;

// Link JQuery
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;

// Link DeviceJS
&lt;script type=&quot;text/javascript&quot; src=&quot;device.min.js&quot;&gt;&lt;/script&gt;

// Initialize DeviceJS
&lt;script&gt;
    $(document).ready(function () {
        $('selector').devicejs(options);
    });
&lt;/script&gt;
</pre>

此代码显示以下内容(注意整个脚本标记为红色):

美化代码

但是,当我在下面做这个小技巧时(在关闭开始脚本标记之前添加一些不可见的 html):

<pre>
// Link CSS
&lt;link rel=&quot;stylesheet&quot; href=&quot;device.css&quot; /&gt;

// Link JQuery
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;

// Link DeviceJS
&lt;script type=&quot;text/javascript&quot; src=&quot;device.min.js&quot;&gt;&lt;/script&gt;

// Initialize DeviceJS
&lt;script<span style="display:none;"> t</span>&gt;
    $(document).ready(function () {
        $('selector').devicejs(options);
    });
&lt;/script&gt;
</pre>

它似乎显示确定:

破解后美化代码

问题是当我添加多个非链接脚本标签块时,问题又出现了。所以下面的代码:

<pre>
// Link CSS
&lt;link rel=&quot;stylesheet&quot; href=&quot;device.css&quot; /&gt;

// Link JQuery
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;

// Link DeviceJS
&lt;script type=&quot;text/javascript&quot; src=&quot;device.min.js&quot;&gt;&lt;/script&gt;

// Initialize DeviceJS
&lt;script<span style="display:none;"> t</span>&gt;
    $(document).ready(function () {
        $('selector').devicejs(options);
    });
&lt;/script&gt;

&lt;script<span style="display:none;"> t</span>&gt;
    $(document).ready(function () {
        $('selector').devicejs(options);
    });
&lt;/script&gt;
</pre>

显示为:

在此处输入图像描述

我查看了 Prettify.JS 源代码,在第 1211 行看到以下内容:

['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],

我相信这是词法分析器的一部分。

我不是正则表达式忍者,所以我会很感激任何关于如何调整它的帮助,以便 Prettify.JS 可以容纳没有属性的非链接脚本标签。

提前致谢。

4

1 回答 1

0

一个HTML示例显示此工作正常,因此我怀疑您的问题与美化不将内容识别为 HTML 以及使用错误的语言处理程序有关。没有看到你是如何调用美化的,很难说。


我查看了 Prettify.JS 源代码,在第 1211 行看到以下内容:

['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],

我相信这是词法分析器的一部分。

你是对的。这就是说脚本元素以

<script\b[^>]*>

或文本<script(由于结尾不区分大小写/i)后跟一个分词符和任意数量的非>字符,后跟一个>

然后

([\s\S]*?)

非贪婪地匹配结束标记之前所需的最少字符数。这是在捕获组 1 中,因此将使用类型提示递归地美化此内容lang-js

最后

(<\/script\b[^>]*>)

与打开标签类似,但它是一个关闭标签。它可能不应该在捕获组中,但这不应该影响正确性。

于 2012-11-10T22:08:39.560 回答