除了p标签之外,从JavaScript中删除文本中的Html?

时间:2009-05-06 08:23:07

标签: javascript

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

2 个答案:

答案 0 :(得分:10)

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

</?(?:(?!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正则表达式实际应用的少数情况之一。

有些人可能反对并说使用文字“&lt;”实际上并不禁止在属性值中,因此可能会破坏上述正则表达式。他们是对的。

正则表达式将在情况中中断,替换带下划线的部分:

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

如果您的输入可以实现这一点,那么您可能必须使用更高级的工具来完成工作 - 解析器。

答案 1 :(得分:3)

这应该有帮助

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

我的正则表达式的解释:

替换所有部分

  1. 以“&lt;”开头,
  2. 没有跟着(?!
    • 任意数量的空白字符“\ s *”
    • 可选“/”字符
    • 和标签名称后跟一个单词边界(此处为“p \ b”)
  3. 包含任何不等于“&gt;”的字符 - [^>;] *
  4. 以“&gt;”结尾人物