在 php 中使用 Regex 替换 JS 文件中变量的值
Replace value of variable in JS file using Regex in php
我想使用 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
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is
然后用这个替换值:preg_replace
/([\"\'])(?:(?=(\?)).)*?/is // to get what is between ""
or
/(?<=\=)(.*?)(?=\;)/is // to get what is between = & ;
然后使用第一个公式再次替换文件中的整行:preg_replace
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is
我想问的是他们的方法是否更好,因为我觉得这工作量太大,并且不确定我到目前为止所做的工作的优雅和性能!
注意:它是一个汇总配置文件,将从当前 php 方法的 controller/method 获取包文件名 >> 它是一个特定的场景。
您可以使用
preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '"NEW VALUE";', $string)
见regex demo。 详情:
^
- 作为行的开始(由于 m
标志)
(\h*const\s+filename\s*=\s*)
- 第 1 组:零个或多个水平空格 (\h*
)、const
、一个或多个空格 (\s+
)、filename
, =
包含零个或多个空格 (\s*=\s*
)
.+
- 除换行字符外,一个或多个字符尽可能多。
替换包含 </code>,将组 1 的内容插入结果字符串的替换反向引用。</p>
<p>见<a href="https://3v4l.org/DCO5F" rel="nofollow noreferrer">PHP demo</a>:</p>
<pre><code>$string = "// blah blah blah\n\nconst filename = \"\";\n\n// blah blah blah";
echo preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '"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 filename 中的值。所以,我们的 php 应该看起来像这样:
$newFilename = 'this_will_replace_the_value_in_const_filename';
$replace = get_file_contents('path_to_the_js_file');
$replaced = preg_replace('/\s*const\s+filename\s*=\s*\"(.*)\"\s*\;/', "const filename = '$newFilename';", $replace)
现在,具有 const filename 操作值的新字符串存储在 $replaced
中。您可以使用 echo 打印它,如下所示:
//php
echo $replaced;
输出:
// blah blah blah
const filename = 'this_will_replace_the_value_in_const_filename';
// blah blah blah
我想使用 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
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is
然后用这个替换值:preg_replace
/([\"\'])(?:(?=(\?)).)*?/is // to get what is between ""
or
/(?<=\=)(.*?)(?=\;)/is // to get what is between = & ;
然后使用第一个公式再次替换文件中的整行:preg_replace
/(((\bconst\b)+\s*(\bfilename\b)+\s*)+\s*=)[^\n]*/is
我想问的是他们的方法是否更好,因为我觉得这工作量太大,并且不确定我到目前为止所做的工作的优雅和性能!
注意:它是一个汇总配置文件,将从当前 php 方法的 controller/method 获取包文件名 >> 它是一个特定的场景。
您可以使用
preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '"NEW VALUE";', $string)
见regex demo。 详情:
^
- 作为行的开始(由于m
标志)(\h*const\s+filename\s*=\s*)
- 第 1 组:零个或多个水平空格 (\h*
)、const
、一个或多个空格 (\s+
)、filename
,=
包含零个或多个空格 (\s*=\s*
).+
- 除换行字符外,一个或多个字符尽可能多。
替换包含 </code>,将组 1 的内容插入结果字符串的替换反向引用。</p>
<p>见<a href="https://3v4l.org/DCO5F" rel="nofollow noreferrer">PHP demo</a>:</p>
<pre><code>$string = "// blah blah blah\n\nconst filename = \"\";\n\n// blah blah blah";
echo preg_replace('~^(\h*const\s+filename\s*=\s*).+~mi', '"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 filename 中的值。所以,我们的 php 应该看起来像这样:
$newFilename = 'this_will_replace_the_value_in_const_filename';
$replace = get_file_contents('path_to_the_js_file');
$replaced = preg_replace('/\s*const\s+filename\s*=\s*\"(.*)\"\s*\;/', "const filename = '$newFilename';", $replace)
现在,具有 const filename 操作值的新字符串存储在 $replaced
中。您可以使用 echo 打印它,如下所示:
//php
echo $replaced;
输出:
// blah blah blah
const filename = 'this_will_replace_the_value_in_const_filename';
// blah blah blah