html - 清理序列化 DOM 的安全正则表达式?

标签 html regex string pattern-matching

我正在为 JavaScript 的 .replace 方法寻找几个非常安全的正则表达式模式。输入是一个序列化的 DOM 字符串,我想删除所有 YUI3 classNames 和 YUI3 生成的 id 属性。

var resourceDOMStr = Y.DataType.XML.format( Y.Node.getDOMNode(this.getIframeDOMContainer()).innerHTML );
alert('unsanitized markup:\n\n'+resourceDOMStr );
// Remove YUI-added id's and classes
    // regex to remove ' id="*"'
    // regex to remove entire class attr: ' class="'yui3-*'"'
    // regex to remove className + trailing space: class="'yui3-* 'safeClass"
    // regex to remove className + leading space: class="safeClass' yui3-*'"
resourceDOMStr.replace('', '');
alert('sanitized markup:\n\n'+resourceDOMStr );

是的,我想干净一点,删除整个 id 属性,它的值总是以“yui_3”开头,例如; id="yui_3_3_0_1_1296949124608175"。另外,如果它唯一的类是 YUI3 生成的类名,我想删除整个类属性,否则我只想删除 YUI3 类名和任何前导/尾随空格。生成的类名总是以 'yui3-' 开头,examples;

  • class="yui3-dd-shim"
  • class="safeClass yui3-dd-shim"
  • class="yui3-dd-shim safeClass"

...我不希望“safeClass”被改变,我不希望前导/尾随空格的堆积,因为生成的替换字符串将被多次加载、清理和保存.

非常感谢任何头痛解决者。


编辑:

    <div id="wrap"><h1 id="yui_3_3_0_1_1296942015298202" class="yui3-dd-drop">Resource 1 Title</h1>
                            <p id="yui_3_3_0_1_1296942015298219" class="yui3-dd-drop">Lorem ipsum dolor sit amet, <a href="javacript:;" id="yui_3_3_0_1_1296942015298236" class="yui3-dd-drop">consectetur adipiscing</a> elit. Proin et sem leo, sed luctus nisi. Suspendisse pharetra iaculis laoreet. Pellentesque vulputate malesuada auctor. Integer laoreet ultricies nunc facilisis adipiscing.</p>

<div class="widget revealer">
        <p>Revealer widget.</p>
        <script type="text/javascript">
            document.RevealerConfig = true;
        </script>
    </div>

<div class="widget quiz safeClass" id="safeId">
        <p>Quiz widget.</p>
        <script type="text/javascript">
            document.QuizConfig = true;
        </script>
    </div>
                            <div class="snippet yui3-dd-drop" id="yui_3_3_0_1_1296942015298253">
                                Vestibulum fermentum, justo id porta suscipit, velit lorem hendrerit nisi, id tincidunt lectus ante quis lacus. Proin et erat sit amet turpis euismod dictum vitae a metus.
                            <div class="widget table">
        <p>Table widget.</p>
        <table width="80%" border="1">
            <tbody><tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
            <tr>
                <td>7</td>
                <td>8</td>
                <td>9</td>
            </tr>
        </tbody></table>
    </div></div>
                            <p id="yui_3_3_0_1_1296942015298270" class="yui3-dd-drop">Proin et sem leo, sed luctus nisi. Suspendisse pharetra iaculis laoreet. Pellentesque vulputate; laoreet ultricies nunc facilisis adipiscing ultricies nunc.</p>

<div class="widget table">
        <p>Table widget.</p>
        <table width="80%" border="1">
            <tbody><tr>
                <td>1</td>
                <td>
<ul>
<li>1</li>
<li>2<ul><li id="yui_2_0_0_1">nested</li></ul></li>
</ul>
</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
            <tr>
                <td class="yui2-dd-drop yui3-dd-drop">7</td>
                <td class="yui2-dd-drop yui3-dd-drop">8</td>
                <td class="yui2-dd-drop yui3-dd-drop">9</td>
            </tr>
        </tbody></table>
    </div>
</div>

希望上面的一切都很好,不要太轻易地把它拆开 - 如下面评论中所述,它的示例 html。

最佳答案

你可以试试这个怪物:

var dirty = 'class="yui3-dd-shim" class="safeClass yui3-dd-shim" class="yui3-dd-shim safeClass"';

var clean = dirty.replace(/class="yui[0-9]-[^\s]+"|\s?yui[0-9]-[^\s"]+\s?|id="yui_[0-9][^"]+"/gi, '');

在您的示例数据上对其进行了测试,似乎可以完成工作。

关于html - 清理序列化 DOM 的安全正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910576/

相关文章:

html - 没有 float LI 的水平列表

php - 无法将空格读取为输入文本中的默认值

java - 使用 LocalDate 作为 POJO 的数据类型时,为什么 univocity 的 CsvParser 会抛出错误以及如何解决它?

html - 将位置从静态更改为相对位置会使绝对跨度消失

javascript - 为什么这个 DIV 渲染没有维度?

正则表达式

regex - 在 awk 中打印 "<"和 ">"之间的文本

regex - 查找命令在命令行中有效,但在脚本中无效

java - 循环后清除字符串缓冲区/构建器

html - 有什么方法可以为这个表单代码添加漂亮的 CSS 效果吗?