【问题标题】:Strip Html from Text in JavaScript except p tags?除了 p 标签之外,从 JavaScript 中的 Text 中去除 Html?
【发布时间】:2012-06-15 05:37:46
【问题描述】:

我需要用 JavaScript 更改 RichEditor 和 TextEditor 模式,现在我需要将 Html 转换为 Text,它实际上仍处于 Html 编辑器模式,所以我只需要 p 标签,但可以剥离其他 Html。

【问题讨论】:

  • @JavaCoder:再次考虑,有一种情况会使正则表达式中断。查看编辑后的答案,并决定这是否适用于您。
  • Tomalak 的回答在大多数情况下都有效,但请记住,将 HTML 剥离为“安全”HTML 非常困难,并且具有严重的安全隐患。如果您将生成的 HTML 发送到服务器,从不指望客户端验证。即使您不将其发送回服务器,基于 GET 或 POST 值构建它也会产生安全漏洞。阅读 XSS 和 CSRF。

标签: javascript


【解决方案1】:

正则表达式替换(全局,不区分大小写):

</?(?:(?!p\b)[^>])*>

使用空字符串。

解释:

<          # "<"
/?         # optional "/" 
(?:        # non-capture group
  (?!      #   negative look-ahead: a position not followed by...
    p\b    #     "p" and a word bounday
  )        #   end lock-ahead
  [^>]*    #   any char but ">", as often as possible
)          # end non-capture group
>          # ">"

这是将正则表达式应用于 HTML 的少数情况之一。

有些人可能会反对并说在属性值中使用文字“

正则表达式会在 这种 情况下中断,替换下划线部分:

<p class="foo" title="unusual < title">
                              ---------

如果您的输入可以实现这样的事情,那么您可能需要使用更高级的工具来完成这项工作 - 解析器。

【讨论】:

  • 很高兴您添加了解释。
  • 是的,附议解释故障。感谢您的澄清。
  • 我怎样才能让它发挥作用?
  • @JavaCoder:这是一个“给我密码”的问题吗?互联网上确实有 的 JavaScript 正则表达式教程。我相信你会设法找到一个告诉你如何完成替换的,只要你去寻找一个。甚至拉斐尔在下面的回答也向您展示了如何做到这一点。但是如果你问如何创建一个 JavaScript 函数,你可能还没有准备好使用正则表达式。而且你的昵称是错误的。
  • @Tomalak 在我见过的所有条形标签答案中,我认为您是第一个解释每一位代码的作用的人,我真的很感激,因为我想知道代码在什么时候做什么我用它...所以谢谢和 +1 ;)
【解决方案2】:

这应该会有所帮助

var html = '<img src=""><p>content</p><span style="color: red">content</span>';
html.replace(/<(?!\s*\/?\s*p\b)[^>]*>/gi,'')

我的正则表达式的解释:

更换所有零件

  1. 以“
  2. 后面没有 (?!
    • 任意数量的空白字符“\s*”
    • 可选的“/”字符
    • 和标签名称后跟一个单词边界(这里是“p\b”)
  3. 包含任何不等于“>”的字符 - [^>]*
  4. 并以“>”字符结尾

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多