JavaScript正则表达式:在字符串中搜索和替换标签

时间:2011-11-11 16:00:43

标签: javascript regex replace

我需要一些Regexp Javascript / JQuery的帮助。我得到了它的工作,但我认为有更好,更简单的解决方案。

想法是: 如果在button点击,target内部html在任何地方都有<b></b>标记 - 请将其删除,否则在开头添加标记<b>,在结尾添加</b>

这是代码:jsFiddle example

<input id="button" type="button" value="Bold it"/>
<div id="target">This is <b>sample</b> text</div>


$(function(){
    $('#button').click(function(){

       var t = $('#target');

         //: search for '</b>' too ???
         var isFound = t.html().search(new RegExp(/<b>/i));

         if(isFound >= 0) //: make 2 replaces into 1 ???
            t.html(t.html().replace(/<b>/,'').replace(/<\/b>/,''))
         else
            t.html('<b>'+t.html()+'</b>')
    })
})

问题在代码中被注释:

  1. 如何搜索<b></b>

  2. 在一个.replace(/<b>/,'').replace(/<\/b>/,'')

  3. 中设置.replace(/<b>...?..../,'')

1 个答案:

答案 0 :(得分:3)

这不是正则表达式有用的东西,因为表达式失败的方式有很多种。有关原因,请参阅RegEx match open tags except XHTML self-contained tags。 尝试使用t.children("b");在您的代码中查找<b>...</b/>的实例。

在这种情况下,请尝试以下操作:

t.children("b").each(function() {
    var contents = $(this).contents();
    $(this).replaceWith(contents);
});

或完全扩展:

$(function(){
    $('#button').click(function(){
        var t = $('#target');
        t.children("b").each(function() {
            var contents = $(this).contents();
            $(this).replaceWith(contents);
        });
    });
});