<div><br>
    <br>
</div>
<div><br>
</div>
<div><br>
</div>
<div></div>
<div>
</div>
上面要替换成6个<br>。
即<div><br>
    <br>
</div>变成<br><br>
<div><br>
</div>
变成<br>
<div></div> 与
<div>
</div>都变成<br>
谢谢大家

解决方案 »

  1.   

    还有<div>任何字符
    </div>要变成任何字符<br>也就是说有<div></div> 就是一行了。里面有几个br就几个br
    div里面有其它'字符串'就弄成 '字符串<br>'
      

  2.   

    str=str.replace(/<div>((?:.|\s)*?)<\/div>/gi,function (){
    var arg1=arguments[1];
    if(/<br>\s*$/i.test(arg1)){
    return arg1;
    }
    return arg1+'<br>';
    });
      

  3.   

    var regex = /<div>(.|\n)*?<\/div>/gi
    var str = "<div><br><br></div><div><br></div><div><br></div><div></div><div></div>";
    var result = "";
    str.replace(regex,func)
    function func(word)
    {
        var v = word.replace(/<\/?div>/gi,"").replace(/<br>/i,"")+"</br>"
        result += v
    }
      

  4.   

    这两个需求是相互矛盾的
    <div><br>
      <br>
    </div>
    按顶楼的说法是两个<br>,按1楼的说法应该是三个<br>
    先明确需求,究竟什么规则
      

  5.   


    str=str.replace(/<div>((?:.|\s)*?)<\/div>/gi,function (){
    //?:是非捕获标志 你可以这样理解 就是要正则跑的快一点 和外围的圆括号是一起出现的(?:) 
    //.|\s  .表示任意字符 但不包括 \n换行符 \r回车符 |代表 或得意思 既然.不包括 \n\r
    //加上\s 包括\n\r\t\f\x0B 就表示了所有字符 (?:.|\s)就表示 所有的字符不捕获这个分组
    //经验提示 :|通常 所链接的 各组需要用()包起来 *表示 0-很多 *? 表示惰性匹配 加后面的</div>
    //表示 只要遇到</div>就不匹配啦 不加?的后果是 一直匹配到最后一个</div>
    //g表示 完成一次匹配 继续从最后一次匹配位置开始查找字符串 再匹配 直至字符串末尾 
    //i表示 忽略大小写 div Div DIV 都一样
    var arg1=arguments[1];
    //这里要说一次 replace(str,函数)
    //函数的参数取决于你的正则的()数 但不包括非捕获组的括号哦 没有括号就1个参数 所匹配的字符都是
    //第2个参数是第1个括号 第3个参数是第2个 ...
    if(/<br>\s*$/i.test(arg1)){
    //<br>\s*$ 我所表达的意思是 <br> 加空白 或者回车 多个都可以 但要紧挨着</div> 
    //如果有 就不再加<br/>啦 
    return arg1;
    }
    return arg1+'<br>';
    });
      

  6.   

    不会的啊。他有做这个判断
    if(/<br>\s*$/i.test(arg1)){