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

2024-01-29

我正在为 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 生成的 className,我想删除整个类属性,否则我只想删除 YUI3 className 和任何前导/尾随空格。生成的类名将始终以“yui3-”开头,例如;

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

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

非常感谢任何解决头痛问题的人。 d


EDIT:

    <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, '');

在您的样本数据上进行了测试,似乎可以完成这项工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全的正则表达式来清理序列化的 DOM? 的相关文章

  • 使用 Javascript 动态添加时,SVG 元素无法正确缩放

    我正在尝试使用 Javascript 在 Bootstrap Grid 中添加 SVG 控件 我可以使用 Javascript 添加 SVG 但页面的缩放 调整大小的行为并不像使用静态 HTML 构建的那样 单击 添加页面 按钮时 一组新的
  • 使用鼠标在 HTML5 Canvas 上绘图

    我想使用鼠标在 HTML Canvas 上绘图 例如 绘制签名 绘制名称 我将如何实施这个 这是一个工作示例
  • 如何获取字符串中所有匹配项的位置?

    我有一份文本文档和一个查询 查询可能超过一个单词 我想找到文档中所有查询出现的位置 我想到了documentText indexOf query 或使用正则表达式 但我无法使其工作 我最终采用以下方法 首先 我创建了一个名为的数据类型Que
  • 如何使用纯 javascript 获取单击元素的 id?

    div style width 100px height 100px background green class div1 Some text div div style width 100px height 100px backgrou
  • 移动网站“WhatsApp”按钮可将消息发送至特定号码

    可以定制移动网站 以允许用户将 WhatsApp 中预先填写的消息分享给手动选择的联系人 如所给出的here https faq whatsapp com en android 28000012它是使用自定义 URL 方案完成的 一个例子
  • 将无序列表转换为目录

    参考这个小提琴 http jsfiddle net exGnZ http jsfiddle net exGnZ 你好 我正在尝试用无序列表和前导点重现目录 不幸的是 当内容很长时 格式就会崩溃 有谁知道如何让下图中的第二章与点出现在同一行
  • 尝试使用 Excel 中的 VBA 从网页中提取一个值

    我几天来一直在尝试查找信息 但是我找到的所有示例都只有一小段代码 我需要全部 我想要做的是从主页中提取一个值并将其放入 Excel 的单元格中 然后从同一站点上的另一个页面获取另一个值并放入下一个单元格等 该页面是瑞典证券交易所页面 我用作
  • Flex、AngularJS + Masonry、akoenig/angular-deckgrid 等 [重复]

    这个问题在这里已经有答案了 我一直在发送此电子邮件 我即将发布一个用于 Web 应用程序安全的应用程序 它需要使用像 Masonry 这样的网格 我已经尝试过所有的 每一个角度模块 指令和不同的方法 包括基于 CSS 的技术 纯 Vanil
  • 如何左对齐这些 Bootstrap 表单项?

    我是第一次使用 Bootstrap 在将此表单水平向左对齐时遇到很多麻烦 列表项是水平的 因为它们应该是水平的 但我希望控制标签 表单标签的 Bootstrap 类 全部位于向左浮动的相同位置 该表单包含在跨度为 7 的 div 中 因为我
  • 为什么 ?(*[[:class:]])foobar 的 Bash 模式匹配速度很慢?

    我有一个文本文件 foobar txt 大约 10KB 不是那么长 然而 以下匹配搜索命令在高性能 Linux 计算机上大约需要 10 秒 bash gt shopt s extglob bash gt cat foobar txt pri
  • Java:线程“主”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

    我是初学者 谁能帮我弄清楚我们在做什么 我正在尝试读取字符串并将字符串的每个字符存储在数组中 import java util Scanner public class CoreMainDigitExtractor static Scann
  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 无需重定向的 HTML 页面提交

    有没有什么方法可以在不使用ajax的情况下提交html表单而无需从当前页面重定向 你可以设置一个target 为您form 这样您就可以将表单提交到新选项卡 target blank 或一个小的 隐藏的iframe target nameo
  • 为什么“script”命令会生成 ^[ 和 ^M 字符以及如何使用 vim 搜索和替换删除它们?

    在linux上 使用bash shell 当我使用script命令时 生成的文件称为typescript 当我用 vim 打开该文件时 每一行都包含 M字符 并且有几行 由于我的彩色命令提示符 包含一个字符 我想用任何东西替换这些字符 从而
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • CSS 过滤器在 Firefox 中不起作用

    我正在尝试 CSS 过滤器 但它在我的 Firefox 15 0 浏览器中不起作用 HTML div class google img src https www google com images srpr logo3w png div
  • @fontface - 禅宗购物车中的 403 禁止错误

    我不确定这是否是发布此内容的正确位置 因为我不知道问题出在哪里 基本上 字体现在对我来说真的很痛苦 而且没有任何效果 我尝试从 google fonts 加载字体 但遇到了 IE 问题 所以我决定下载它们并自己提供服务 但现在它无法在任何浏
  • CSS以两种颜色显示一个字符[重复]

    这个问题在这里已经有答案了 css中是否可以用两种颜色制作单个字符 我的意思是例如字符 B 上半部分为红色 下半部分为蓝色 h1 font size 72px background webkit linear gradient red 49
  • 如何在 CSS 中将容器内的多个 div 居中

    我正在测试像 Windows Metro 风格的中心分隔线 container height 300px width 70 background EEE margin 10px auto position relative block ba
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html

随机推荐

  • 由于位图大小过大而导致内存不足异常

    由于虚拟内存堆大小有限 我遇到内存不足的问题 这是我从服务器获取位图的代码 SuppressWarnings unchecked public class DrawableManager SuppressWarnings rawtypes
  • Android 通知未在 API 26 上显示

    我最近将我的应用程序更新到 API 26 并且通知不再起作用 甚至没有更改代码 val notification NotificationCompat Builder this setSmallIcon R drawable ic noti
  • Amazon S3 重定向和 Cloudfront

    我正在尝试使用此处引用的对象在 S3 上设置 301 重定向http docs aws amazon com AmazonS3 latest dev how to page redirect html http docs aws amazo
  • Git:更新后挂钩,运行需要访问存储库中所有文件的脚本

    我现在遇到了一些困境 因为我需要一个脚本来运行 每当远程存储库更新时 即 每当有人运行 git Push 从存储库中的文件构建包 然后 这些包被放置到 git 服务器上的一个目录中 该目录通过 HTTP 公开给客户端以供将来使用 问题是 我
  • 在 Javascript 中,如何判断用户是否同时按下两个键?

    在 Javascript 中 如何判断用户是否同时按下两个键 例如 我在屏幕中间画了一个圆圈 我想在用户按住向上箭头时向上移动它 在用户按住向右箭头时向右移动它 这部分工作很容易 如果用户同时按住向上和向右箭头 我想沿对角线 向上和向右移动
  • 事件循环上下文中微任务和宏任务之间的区别

    我刚刚读完 Promises A 规范 并偶然发现了术语 microtask 和 Macrotask 请参阅http promisesaplus com notes http promisesaplus com notes 我以前从未听说过
  • CSP:child-src 和frame-src 已弃用

    在 CSP v2 中框架 src已被弃用 子源代码建议使用 在 CSP v3 中框架 src在未弃用和子源代码已弃用 目前 2017 年 9 月 Chrome child src 指令已被弃用 并将在 2017 年 8 月左右的 M60 中
  • 从 XML 模式生成 XML 实例 (xsd) [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 圆角仅在 svg 的一侧

    我正在尝试实现类似图表的条形图 我有以下 html 元素
  • StackExchange.Redis:获取频道订阅的数量(即 PUBSUB NUMSUB)

    有没有办法通过 StackExchange Redis 库获取特定 Redis 频道的频道订阅数量 当直接与 Redis 交互时 它将使用 PUBSUB NUMSUB 命令 http redis io commands pubsub htt
  • 波浪背景颤振辅助

    I have been struggling with this problem for the past 3ish days Basically I want the homepage of my app to have a waveli
  • AEM 6 对话框中有条件显示/隐藏字段

    我正在使用简单的创作对话框构建一个相对简单的 AEM 组件 对话框的顶部是一个选择字段 当此选择字段设置为特定项目时 我希望对话框中的某些字段消失 我研究了 Foundation Carousel 组件的实现 它使用cq dialog dr
  • C++11 中 COW std::string 实现的合法性

    我的理解是 写时复制并不是实现一致性的可行方法 std string在 C 11 中 但当最近在讨论中出现时 我发现自己无法直接支持该声明 我是否正确 C 11 不承认基于 COW 的实现std string 如果是这样 这个限制是否在新标
  • ajax请求浏览器限制

    从一个更通用的问题开始 如果是 JSON 请求 ajax 请求的响应大小是否有限制 我通过 JSON 请求传递大量数据 并在 FF3 中遇到 脚本堆栈配额已耗尽 消息 现在 FF2 中的配额为 4mb 但 FF3 中的配额为 640kb 我
  • 在批处理中,如何在输入提示字符串的开头创建空格?

    假设我有一个批处理文件 其中包含 填充 并且我想缩进提示字符串的开头以供用户输入 如果我使用空格 则运行时不会显示它 它只是忽略空间 该脚本为例 echo off echo echo echo Hi echo Please input so
  • 如何从 boost 库中取出单个元素(例如共享指针)?

    我一直在尝试一些 Boost 组件 我认为在我正在从事的项目中直接需要的唯一一个是boost shared ptr 仅仅包含所需的文件会很困难吗 shared ptr 或者至少在我的项目中包含 Boost smart ptr 目录的文件 它
  • JVM 10 规范有差异吗?

    有谁知道是否有一个版本的 Java 10 和 JVM 10 规范与以前的版本有所不同 对于 Java 8 和 Java 9 存在带有差异的规范 否则很难看出到底发生了什么变化 关于Java 9和Java 10 18 3 的区别 可以下载 J
  • 如何使用react发送表单数据

    我有一个使用此方法的 webapi public async Task
  • 禁用seam的重定向过滤器

    我正在接缝中做一个需要静态 URL 的项目 我有一个映射到 group group locale 的视图 在该页面上我有一个所谓的消息列表 每条消息都有一个按钮 用于保存对消息的更改 这与一个动作 bean 相关联 如下所示
  • 安全的正则表达式来清理序列化的 DOM?

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