作者:佳佳乐木地板1012 | 来源:互联网 | 2021-11-12 02:32
网友wys提问:如何仅使用Javascript支持的正则语法,将 代码如下: 中...之间的都替换为? 思考 该问题
网友wys提问:如何仅使用Javascript支持的正则语法,将
代码如下:
中
之间的
都替换为
?
思考
该问题的难点之一在于Javascript支持的正则特性实在有限。楼主已经想到了非Javascript的解法,如下:
代码如下:
re=/(?<=
)(?=.*?<\/table>)/gi;
alert (sourcestr.replace(re,"
"));
嗯,思路大致是这样。较真起来,即使Javascript支持逆序环视,上面答案并不能够如愿运行。原因是带有量词的逆序环视(即在(?<=)里面使用?, *, +, {}这样的量词)是更高级的的语法,极少有语言能够支持(特例是.Net)。
但是,像楼主这样的正则问题应该是很普便的一个问题,我们经常需要循环地替换一些内容。该如何解答呢?
思路一
阅读Javascript的文档,我找到了lastIndex这样的东东。根据这个东东,我形成了这样的思路:
&#8226;先按外层循环,找到第一组较大的匹配。正则代码是
]*>[\s\S]*?<\/table>
&#8226;定位到这次匹配结束的起始位置,替换掉这一段字串中所有的。
&#8226;循环执行。
我觉得上述思路大致清晰,但是细节太多(每次匹配涉及3个位置点,一个长度),解起来并非从容不迫,最终的代码想必也不会赏心悦目;尤为重要的是,整个思路像是原始的 Crack,而不是高手的 Hack 。而且思路与正则关系不大。我决定换一条路。
思路二
关键是循环和嵌套。还好不是盗梦空间的深层递归。能否将匹配的内容保护起来,替换完之后再放回原位呢?
想到这里,就豁然开朗了。
思路:先找到所有的匹配内容,记路在数组inner中;
同时使用该正则,将原字串split为另一个数组wrapper;
一个重要的特点是,wrapper一定比inner多一个元素,它一一将inner项隔开,并处于最外层。wrapper 和 inner 的关系,就像是一个手掌的5根指头与4个指缝的关系。将中间的元素取出,记下位置,等处理完之后,再将所有的元素粘合在一起。就是这样简单。代码如下(为了让问题更有普使性,我稍改了一下源字串):
代码如下:
贴图:
更新
果然是能人辈出,评论更精彩!请看评论中的这则代码:
代码如下:
alert(sourcestr.replace(/
/ig, function($1){return $1.replace(//ig,"
")}));
PS: 本站刚刚添加了评论中代码的解析,可以贴代码了。格式见评论部分的图例显示。谢谢合作!
推荐阅读
-
浅析javascript异步执行函数导致的变量变化问题解决思路-浅析javascript异步执行函数导致的变量变化问题解决思路for(vari0;i ...
[详细]
蜡笔小新 2023-10-15 18:57:11
-
表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ...
[详细]
蜡笔小新 2023-10-15 18:44:55
-
-
Iwouldliketobeabletohaveasidebarthatcanbetoggledinandoutonabuttonpress.However ...
[详细]
蜡笔小新 2023-10-13 12:28:22
-
但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。下面是具体的做法:一:跳转到新页面,并且是在新窗口中打开时:复制代码代码如下:fu ...
[详细]
蜡笔小新 2023-10-13 12:25:13
-
Whyusingstringsaskeysofarray,consoleisshowingthatarraywithoutthesedeclaredvaluesand ...
[详细]
蜡笔小新 2023-10-13 11:19:56
-
javascript函数中参数传递问题示例探讨-相信每一位刚接触javascript的同学在函数参数传递上都会很疑惑,原因无他,那就是它的语法太怪异了,你定义一个函数例如funct ...
[详细]
蜡笔小新 2023-10-13 11:07:33
-
JavaScript在常人看来都是门出不了厅堂的小语言,仅管它没有明星语言的闪耀,但至少网页的闪耀还是需要它的,同时它是一门很实用的语言,本人平时就喜欢拿它来写点实用工具或应用,本文演示用JavaSc ...
[详细]
蜡笔小新 2023-10-13 09:49:41
-
JavaScript概述1.JavaScript定义JavaScript是Netscape公司开发的一种基于对象和事件驱动的脚本语言。它是弱类型语言,只能由浏览器解释执行。其中:脚本语言:解释运行( ...
[详细]
蜡笔小新 2023-10-13 09:36:45
-
JavaScript实现在页面间传值的方法-本文实例讲述了JavaScript实现在页面间传值的方法。分享给大家供大家参考。具体如下:问题如下:在a.html页面中,的 ...
[详细]
蜡笔小新 2023-10-13 01:38:28
-
Ihavefollowingjsonarraywhichisgeneratedatruntime.Hencethenumberofnamedatapairsvarie ...
[详细]
蜡笔小新 2023-10-12 21:52:44
-
ImgettingabugwithInternetExplorer.Theiframedoesnthavecorrectsizeanditisdisplayedo ...
[详细]
蜡笔小新 2023-10-12 20:54:23
-
我有这个工厂:collect()并创建了该对象:consttask( ...
[详细]
蜡笔小新 2023-10-12 20:02:21
-
我试图制作一个进度条,如果还有更多内容仍被隐藏,则显示箭头。为了更清楚,我做 ...
[详细]
蜡笔小新 2023-10-12 19:31:36
-
用了一年多Flex,感触多多。偶尔有同行的朋友问我啥是Flex,说实话,一时半会儿我还真说不清楚。尤其是对于一个从未接触过Flex的朋友,想要由浅入深地只用嘴巴不用电脑给他讲明白,这确实难为 ...
[详细]
蜡笔小新 2023-10-12 19:29:24
-
<!DOCTYPEhtml><html><head><metacharsetutf-8><head&g ...
[详细]
蜡笔小新 2023-10-12 18:59:44
-
佳佳乐木地板1012
这个家伙很懒,什么也没留下!