Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP,如何在源字符串中可靠地识别(查找)已知的Javascript变量名?_Javascript_Php_Regex - Fatal编程技术网

使用PHP,如何在源字符串中可靠地识别(查找)已知的Javascript变量名?

使用PHP,如何在源字符串中可靠地识别(查找)已知的Javascript变量名?,javascript,php,regex,Javascript,Php,Regex,假设我有一个PHP字符串,其中包含以下文本,或者其他一些文本,如果放入解释器中,这些文本是有效的Javascript代码: $js_脚本PHP变量 我希望在不使用完整的javascript解析器的情况下,将整个代码中的变量名本身替换为l1,从而生成以下输出: $js_脚本PHP变量 我认为避免使用解析器是一个不错的选择: 对于这项任务,他们似乎做得太过火了, 这是我希望对输入代码执行的唯一修改, 我明确知道要替换的变量名。 我不关心性能,因为结果输出将被缓存。我考虑使用regex实现这一点,也就

假设我有一个PHP字符串,其中包含以下文本,或者其他一些文本,如果放入解释器中,这些文本是有效的Javascript代码:

$js_脚本PHP变量

我希望在不使用完整的javascript解析器的情况下,将整个代码中的变量名本身替换为l1,从而生成以下输出:

$js_脚本PHP变量

我认为避免使用解析器是一个不错的选择:

对于这项任务,他们似乎做得太过火了, 这是我希望对输入代码执行的唯一修改, 我明确知道要替换的变量名。 我不关心性能,因为结果输出将被缓存。我考虑使用regex实现这一点,也就是说,使用以下方法查找代码字符串中加载的所有实例:

\bloading\b(?=[^"]*(?:"[^"]*"[^"]*)*$)
。。。它显然还不支持撇号,但除此之外,到目前为止似乎能正确处理任务

有什么我遗漏的吗?我知道JavaScript并不是一种常规语言,但这部分呢?我是否应该忘记使用正则表达式,而改用解析器呢?

如果使用preg\u replace,它非常简单:

$out = preg_replace("/(\W)(loading)(\W)/", "$1l1$3", $in);
可以找到一个例子


编辑:我做了一个快速的基准测试,在您指定的文件上运行一个这样的替换平均花费了我的计算机2μs。我把基准测试代码

放在建议stru_replace上,但最好使用preg_replace。使用正则表达式,您可以涵盖更多场景。”/\sloading\s/'、'/loading\./'等。很想知道您试图解决的问题。。看起来这很容易失败。@Hamish我想实现一个轻量级的、简单的选择变量名压缩:1。节省带宽,2。隐藏各种功能背后的部分逻辑。到目前为止,我的正则表达式保持不变,但正如您所说,这可能会失败,因此问题就来了。@JánosWeisz在这种情况下,请使用类似闭包编译器的方法缩小脚本,并使用gzip压缩服务器提供的流。JS也应该是静态的——您可以通过将其放在CDN或静态主机上,而不是通过PHP运行它所带来的巨大性能损失,从而节省您的麻烦/成本。
\bloading\b(?=[^"]*(?:"[^"]*"[^"]*)*$)
$out = preg_replace("/(\W)(loading)(\W)/", "$1l1$3", $in);