我想在运行时使用php从我的javascript源代码中删除一个无效的特定函数(不返回任何内容)。考虑以下应该由php输出的js代码:
var a = func1(x1);
func2(a + ": " + x1);
// other codes
func2(someOther("Lol") + x1);
// other codes
这里我要删除func2
(它类似于向js控制台输出内容的日志功能)。
现在我想到的第一件事就是编写正则表达式并使用preg_replace
将其替换为空字符串。但我没有成功地定义正确的表达方式。我想知道是否可以编写正则表达式以匹配函数调用?如果可以,请你给我一些提示或示例,以便我可以使用它?
如果你认为有另一种方法,我会很高兴听到你的。
备注
if
条件等复杂结构中(我的意思是你不需要考虑这些情况)答案 0 :(得分:2)
如果您希望全局功能“func2”完全消失,您可以确保您的页面以:
结尾<script> window.func2 = undefined; </script>
如果代码依赖于现有功能,您可以这样做:
<script> window.func2 = function() {}; </script>
现在,假设函数是以某种正常方式定义的,并且在主体末尾放下的代码将在定义函数最初运行的代码之后运行。如果函数是由更动态的东西定义的,那么事情会变得更复杂。
在任何情况下,尝试编写“编辑”某些JavaScript代码的代码最终会变得非常脆弱,或者涉及完整的JavaScript解析器的项目。对于与自身存在争议的服务器应用程序而言,某些事情听起来不正常。
答案 1 :(得分:2)
执行此操作的基本正则表达式是:
$result = preg_replace('~\bfunc2\s*(\((?>[^()]++|(?1))*\));?~', '', $code);
但是:它不处理引号内的括号。要做到这一点,你必须使用:
~\bfunc2\s*(\((?>[^()"']++|"(?>[^"\\]++|\\{2}|\\.)*"|'(?>[^'\\]++|\\{2}|\\.)*'|(?1))*\));?~s
作为模式(不要忘记逃避你使用的引用)。