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

发布于 2017-02-04 17:22:03 字数 374 浏览 1294 评论 8

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(8

清晨说ぺ晚安 2017-10-08 15:12:51

 <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 06:13:26

其实用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 04:33:44

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

归属感 2017-07-21 15:56:41

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

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

甜柠檬 2017-06-28 05:19:19

 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 22:35:49

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

想挽留 2017-04-11 02:22:19

 <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 03:54:37

 <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>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文