在 php 中使用正则表达式替换 JS 文件中变量的值



我想使用 php 更改 js 文件中变量的值,到目前为止我尝试的是获取文件内容并尝试找到一个健壮的正则表达式公式来更改变量的值:

这是 js 文件的内容,请记住,该值可以是=;之间的任何值

// blah blah blah
const filename = ""; // it can be filename = ''; or filename = null; or filename = undefined; and so on
// blah blah blah

我试图用这个来获得确切的行:preg_match

/(((bconstb)+s*(bfilenameb)+s*)+s*=)[^n]*/is

然后替换了使用以下命令的值:preg_replace

/(["'])(?:(?=(\?))2.)*?1/is // to get what is between ""
or
/(?<==)(.*?)(?=;)/is // to get what is between = & ;

然后在使用第一个公式的文件中再次替换整行:preg_replace

/(((bconstb)+s*(bfilenameb)+s*)+s*=)[^n]*/is

我问他们是否是一种更好的方法,因为我觉得这是太多的工作,并且不确定我迄今为止所做的事情的优雅和性能!

注意:这是一个汇总配置文件,>>特定场景,它将从当前 php 方法的控制器/方法中获取捆绑文件名。

您可以使用

preg_replace('~^(h*consts+filenames*=s*).+~mi', '$1"NEW VALUE";', $string)

请参阅正则表达式演示。详情

  • ^- 作为行的开头(由于m标志)
  • (h*consts+filenames*=s*)- 第1组:零个或多个水平空格(h*),const,一个或多个空格(s+),filename=用零个或多个空格(s*=s*)
  • .+- 除换行符字符外的一个或多个字符尽可能多。

替换包含$1,替换反向引用,将组 1 的内容插入到生成的字符串中。

请参阅 PHP 演示:

$string = "// blah blah blahnnconst filename = "";nn// blah blah blah";
echo preg_replace('~^(h*consts+filenames*=s*).+~mi', '$1"NEW VALUE";', $string);

输出:

// blah blah blah
const filename = "NEW VALUE";
// blah blah blah

好的,我不知道我是否正确理解了你想说的话,但在这里我试图回答你的问题。

因此,您希望使用 php 更改存储在const filename = "";中的值。

以下是您的javascript文件的外观:

// blah blah blah
const filename = ""; 
// blah blah blah

现在,我们必须获取存储在const 文件名中的值。所以,我们的 php 应该看起来像这样:

$newFilename = 'this_will_replace_the_value_in_const_filename';
$replace = get_file_contents('path_to_the_js_file');
$replaced = preg_replace('/s*consts+filenames*=s*"(.*)"s*;/', "const filename = '$newFilename';", $replace)

现在,具有const 文件名操作值的新字符串存储在$replaced中。您可以使用 echo 打印它,如下所示:

//php
echo $replaced;

输出:

// blah blah blah
const filename = 'this_will_replace_the_value_in_const_filename'; 
// blah blah blah

最新更新