手机版

JavaScript中嵌套替换的巧妙解决方案(强大的规律性)

时间:2021-10-08 来源:互联网 编辑:宝哥软件园 浏览:

网友Wys问:如何使用只支持JavaScript的常规语法,替换表间的p./table : p中的table p/table p/table p带br/?思考这个问题的难点之一是JavaScript支持的常规特性确实有限。楼主想到了一个非JavaScript的解决方案,如下:复制代码如下: re=/(?=表。*?)(p)(?=.*?\/table)/gi;alert (sourcestr.replace(re,' br '));嗯,思路大致是这样的。事实上,即使JavaScript支持以相反的顺序四处查看,上面的答案也不会像预期的那样起作用。原因是用量词反过来看(也就是在(?=)内部使用?像,*、{}这样的量词是很少有语言能够支持的高级语法(尤其是。Net)。但是像楼主这样的常规问题应该是常见的,我们经常需要循环替换一些内容。怎么回答?我一读JavaScript文档,就发现了类似lastIndex的东西。根据这个东西,我形成了这个思路:先按外环,找到第一组比较大的匹配。常规代码是表[] * [\ s \ s] *?\/table找到此匹配结束的起始位置,并替换此字符串中的所有p。循环执行。我觉得上面的思路大体是清晰的,但是细节太多了(每次匹配涉及三个位置一个长度),解决起来不容易,最后的代码肯定不会顺眼。更重要的是,整个想法就像一个原始的破解,而不是一个黑客大师。而观念与规律性关系不大。我决定换条路。第二,思维的关键是循环和嵌套。幸运的是,这不是偷梦空间的深层递归。你能保护匹配的内容并在放回原处之前替换它吗?想到这里,豁然开朗。想法:首先找到所有匹配的内容,并在数组内部记录方式;同时,利用正则性,将原始字符串拆分成另一个数组包装器;一个重要的特性是包装器必须比内部多一个元素,它将内部项目一个接一个地分开,并将它们放在最外层。面皮和内皮的关系,就像一个手掌的五指和四指的关系。取出中间的元素,写下位置,处理后再把所有的元素粘在一起。就这样。很简单。代码如下(为了让问题更通用,我稍微修改了一下源字符串):复制的代码如下: script type=' text/JavaScript ' var str=' p table p,p/table p table p/table p/table p ';var patt=/table[^]*[\s\S]*?\/table/I;var wrapper _ result=str . split(patt);var inner _ result=str.match(/table[^]*[\s\s]*?\/table/ig);var len=inner _ result.lengthvar final=wrapper _ result[0];for(I=0;伊琳;i ) { tmp=inner_result[i]。替换(/p/gi,' br ');final=tmp wrapper _ result[I 1];} alert(最终);/脚本图:

更新真是人才济济,评论更精彩!请看评论中的这段代码:复制代码如下: alert (sourcestr。替换(/table。*?\/table/ig,函数($1){return $1.replace(/p/ig,' br ')});PS:刚刚在评论中添加了对代码的分析,所以你可以发布代码。有关格式,请参见注释部分的图例显示。谢谢合作!

版权声明:JavaScript中嵌套替换的巧妙解决方案(强大的规律性)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。