|

众所周知,正则替换时 $1 $2可代表子匹配文本进行替换, 但是当替换时新添加的长文本中含有$类似字符串时,会进行多次替换。但往往并非本意。
如一段JS文本的替换:
一、原文本:
<html><body><script>var h = function(){var j = 0;return j;};var content = h();var element = document.getElementById("content");</script></body></html>
二、正则表达式文本:^(<html><body><script>)(.*?var content = .*?)(;var element = document\.getElementById\("content"\);</script></body></html>)$
三、匹配结果:
1、匹配文本:<html><body><script>var h = function(){var j = 0;return j;};var content = h();var element = document.getElementById("content");</script></body></html>
2、子匹配文本:
(1)<html><body><script>
(2)var h = function(){var j = 0;return j;};var content = h()
(3);var element = document.getElementById("content");</script></body></html>
四、正则替换
1、替换文本:$1var x = function(){var $1 = 0;return $1;};var content = x();$3
2、替换分析: 旨在将原文本中的JS部分替换为自己的JS源码,结果替换为自己的执行函数
3、期望结果:<html><body><script>var x = function(){var $1 = 0;return $1;};var content = x();var element = document.getElementById("content");</script></body></html>
4、实际结果:<html><body><script>var x = function(){var <html><body><script> = 0;return <html><body><script>;};var content = x();;var element = document.getElementById("content");</script></body></html>
五、改进说明:
最直接的需求就是在 正则.替换() 方法上加一个控制逻辑,自由选择是否使用$符号代替子匹配文本,然后自己用 正则.取子匹配文本() 命令即可
|
|