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 }
</div>要变成任何字符<br>也就是说有<div></div> 就是一行了。里面有几个br就几个br
div里面有其它'字符串'就弄成 '字符串<br>'
var arg1=arguments[1];
if(/<br>\s*$/i.test(arg1)){
return arg1;
}
return arg1+'<br>';
});
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
}
<div><br>
<br>
</div>
按顶楼的说法是两个<br>,按1楼的说法应该是三个<br>
先明确需求,究竟什么规则
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>';
});
if(/<br>\s*$/i.test(arg1)){