【发布时间】:2022-01-06 13:36:17
【问题描述】:
我想使用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
/([\"\'])(?:(?=(\\?))\2.)*?\1/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 方法的控制器/方法中获取捆绑文件名 >> 这是一个特定的场景。
【问题讨论】:
-
这样做的目的是什么?如果你想让你的 PHP 向 JS 传递一个值,那绝对不是正确的做法。
-
通常你不应该尝试用任何东西来解析 JavaScript,只需要一个合适的解析器。否则你会很难过。提一些容易处理的陷阱:
const not_filename = 0;、const not_fn = "filename = im_a_string";和const a = 1, filename = 'path', c = 3; -
我有一个特定的场景,我知道通常你不想在运行时将任何东西传递给像这样的 js 文件,但这不是在运行时,它是一个配置 js 文件,它会改变编译前一次传递文件名。
标签: javascript php regex svelte rollupjs