如何删除JavaScript文件中字符串的特定部分

时间:2012-04-27 06:33:11

标签: php arrays parsing

使用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()来打开文件,但不知道该行会提前看起来像什么,我不知道要替换什么字符串。有什么想法吗?

4 个答案:

答案 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也有效)并删除逗号(如果值在列表中间)。请注意,当没有逗号时,表达式也会生成有效结果。 (当你想从列表中删除最后一个元素时)