JavaScript-js 如何利用正则递归替换html标签

JavaScript-js 如何利用正则递归替换html标签

归属感 发布于 2017-02-04 字数 407 浏览 1185 回复 8

javascript 如何利用正则递归把<div></div>里的<p>标签全部替换成<br>,其他地方的不替换,例如下面html:

<p>
<div>testtest</div>
<p>
<div>
<p>11111
<p>22223
<p>33333
</div>
<p>
<table></table>
</p>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

清晨说ぺ晚安 2017-10-08 8 楼

 <script language="javascript">
var html = "<div><p>first</p><p>second</p><p>third</p></div>";
var new_html = html.replace(/<p>([sS]*?)</p>/ig, "<br>");
alert(new_html);
</script>

测试通过。

瑾兮 2017-09-11 7 楼

其实用replace两次就可以实现:

<SCRIPT LANGUAGE="JavaScript">
<!--
var str = '<p><div>testtest</div><p><div> <p>11111 <p>22223 <p>33333 </div> <p><table></table></p>';
alert(str.replace(/<div.*?/div>/ig, function($1){return $1.replace(/<p>/ig,"<br>")}));
//-->
</SCRIPT>

晚风撩人 2017-08-08 6 楼

其实你可以换个思路,你可以把字符串分段截开,然后把要处理的那段用正则替换后,再拼接回去就可以了。

归属感 2017-07-21 5 楼

我给个思路吧:
一、 先按外层循环,找到第一组较大的匹配。正则代码是<div[^>]>[sS]?</div>
二、定位到这次匹配结束的起始位置,替换掉这一段字串中所有的<p>。
三、然后把替换完成的字符串连接到初始字符串中,循环执行。

我按照这个思路写代码,一直调试不出来,看下面有高手没!

甜柠檬 2017-06-28 4 楼

 var str = '<p><div>testtest</div><p><div> <p>11111 <p>22223 <p>33333 </div> <p><table></table></p>';

str = str.replace(/<div>(.*?)</div>/gi,function($1){
return $1.replace(/<p>/gi,'<br />');
})
alert(str);

清晨说ぺ晚安 2017-05-28 3 楼

针对这个问题,我说说思路,如果只针对你问题里的一段HTML字符,那么楼上各位的答案都很好,但是如果要考虑到HTML嵌套那可能就没那么简单了。首先<p>标签有成对标签和自闭合标签。
而<p>标签还可以嵌套。这样就没办法通过正则来实现。如果需要考虑这个,就要先匹配<p>标签然后将其它入栈,遇到</p>标签则出栈,然后替换,如果是自闭合标签<p />则直接替换。代码就不写了,不是一两行代码能搞定。

想挽留 2017-04-11 2 楼

 <script type="text/javascript">
var str="<p><div>testtest</div><p><div> <p>11111 <p>22223 <p>33333 </div> <p><table></table></p>";

var patt=/<div[^>]*>[sS]*?</div>/i;
var wrapper_result=str.split(patt);
var inner_result = str.match(/<div[^>]*>[sS]*?</div>/ig);

var len=inner_result.length;
var final=wrapper_result[0];

for (i=0; i<len; i++)
{
tmp=inner_result[i].replace(/<p>/gi,"<br>");
final+=tmp+wrapper_result[i+1];
}
alert(final);
</script>

夜无邪 2017-03-19 1 楼

 <script type="text/javascript">
var str = '<p><div>testtest</div><p><div> <p>11111 <p>22223 <p>33333 </div> <p><table></table></p>';
var reg = /(<div>.*?</div>)/gi;

var result = str.match(reg);
for(var i=0; i<result.length; i++){
reg = /<p>/gi;
ret = result[i].replace(reg, '<br />');
str = str.replace(result[i], ret);
}
alert(str);
</script>