使用PHP,我希望能够打开一个JavaScript文件并取出特定行的一部分。使用下面的例子,我想从文件中删除“8:20 am | 8:20 am”,保持其他所有内容。
我的JavaScript文件如下所示:
var daylist = document.checkout.checkoutDay
var timelist = document.checkout.times
var times = new Array()
times[1]=["8:00am|8:00am", "8:20am|8:20am", "8:40am|8:40am", "9:00am|9:00am"]
阵列中可能有多行,每行都有不同的时间,所以我不知道在哪里找到字符串。我在考虑使用str_replace()和fopen()来打开文件,但不知道该行会提前看起来像什么,我不知道要替换什么字符串。有什么想法吗?
答案 0 :(得分:1)
试试这个:
<?php
$file = file_get_contents( 'MY_FILE.JS' );
$search = array( '"8:20am|8:20am"' );
$replace = array( '' );
$file = str_ireplace( $search, $replace, $file );
$file = preg_replace( '/(,\s*,)/', ',', $file ); // remove 2 consecutice commas.
file_put_contents( 'MY_FILE.JS', $file );
?>
希望它有所帮助。
答案 1 :(得分:1)
使用PHP操作JavaScript文件意味着JavaScript不再是静态文件,浏览器不能再缓存它,因此每次都必须重新下载。
最好将times
数组完全从JavaScript文件中取出,并使您的PHP代码在页面标题中生成一个额外的<script>
标记,该标记只定义该变量。这样,可以动态生成时间,而其余的JavaScript代码保持静态。
答案 2 :(得分:0)
尝试使用fopen()方法并获取php变量中的所有文件内容,然后使用str_replace()进行查找并替换特定字符串并写入相同的js文件
答案 3 :(得分:0)
如果您只想替换此特定行上的出现,您可能需要使用preg_replace()
:
<?php
$filename = 'yourfile.js';
$content = file_get_contents( $filename );
$search = '"8:20am|8:20am"';
$pattern = '/^(\s*times\[1\]\s*=\s*\[.*)(' .
preg_quote($search) .
',?\s*)(.*\]\s*;?)$/m';
$content = preg_replace( $pattern, '\1\3', $content );
file_put_contents( $filename, $content );
?>
结果:
var daylist = document.checkout.checkoutDay
var timelist = document.checkout.times
var times = new Array()
times[1]=["8:00am|8:00am", "8:40am|8:40am", "9:00am|9:00am"]
正则表达式构建得相当复杂,以便在匹配时提供一些灵活性。它允许任意空格(对JS也有效)并删除逗号(如果值在列表中间)。请注意,当没有逗号时,表达式也会生成有效结果。 (当你想从列表中删除最后一个元素时)