正则表达式帮助替换标签

时间:2011-03-14 17:43:00

标签: javascript jquery html regex

我需要扩展下面的正则表达式,以便它也选择< code>带有类的标签,例如< code class =“lol”>

var text = 'This is <i>encoded text</i> but this is <b>bold</b >!';
var html = $('<div/>')
    .text(text)
    .html()
    .replace(new RegExp('&lt;(/)?(b|i|u)\\s*&gt;', 'gi'), '<$1$2>');

有人可以帮忙吗?

我猜的是&lt;(/)?(b|i|u|code|pre)?( class="")\\s*&gt; ??

之类的东西

非常感谢

3 个答案:

答案 0 :(得分:3)

使用正则表达式解析html是一个坏主意,请参阅此answer

最简单的方法是简单地使用一些jQuery的dom操作函数来删除格式化。

$('<div/>').find("b, i, code, code.lol").each(function() {
    $(this).replaceWith($(this).text());
});

jsfiddle上的代码示例。

答案 1 :(得分:1)

这会将整个标记替换为其中的所有内容(包括class,id等):

.replace(new RegExp('&lt;(/)?(b|u|i|code|pre)(.*?)&gt;', 'gim'), '<$1$2$3>');

使用编码字符串中的类来编写代码标记很难(可能不可能),当代码标记采用固定格式(<code class="whatever">)时很容易:

.replace(new RegExp('&lt;(?:(code\\sclass=".*?")|(/)?(b|u|i|code|pre)(?:.*?))&gt;', 'gim'), '<$1$2$3>');

答案 2 :(得分:0)

我不会使用正则表达式来解析标记,但如果它只是一个字符串片段,那么这样就足够了。应该注意的是,你使用的正则表达式使用\ s *负担过重。它的可选形式可以通过开销来替换完全相同的东西。最好使用\ s +

正则表达式:<(/?(?:b|i|u)|code\s[^>]+class\s*=\s*(['"]).*?\2[^>]*?)\s+>
替换:<$1>
修饰符:sgi

<                       # < Opening markup char
   (                       # Capture group 1
       /?                        # optional element termination
       (?:                       # grouping, non-capture
          b|i|u                    # elements 'b', 'i', or 'u'
       )                         # end grouping
    |                         # OR,
       code                      # element 'code' only
       \s [^>]*                  # followed by a space and possibly any chars except '>'
       class \s* = \s*           # 'class' attribute '=' something
         (['"]) .*? \2           # value delimeter, then some possible chars, then delimeter
       [^>]*?                    # followed by possibly any chars not '>'
   )                       # End capture group 1
   \s+                     # Here need 1 or more whitespace, what is being removed
>                      # > Closing markup char