1

使用 PHP,我希望能够打开一个 JavaScript 文件并取出特定行的一部分。使用下面的示例,我想从文件中删除“8:20am|8:20am”,保持其他所有内容不变。

我的 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

4 回答 4

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 );
?>

希望能帮助到你。

于 2012-04-27T06:40:14.453 回答
1

用 PHP 操作 JavaScript 文件意味着 JavaScript 不再是静态文件,不能再被浏览器缓存,所以每次都要重新下载。

最好将该times数组完全从 JavaScript 文件中取出,并让您的 PHP 代码在页面标题中生成一个附加<script>标记,该标记仅定义该变量。这样,时间可以动态生成,而 JavaScript 代码的其余部分保持静态。

于 2012-04-27T06:43:02.737 回答
0

尝试 fopen() 方法并获取 php 变量中的所有文件内容,然后您可以使用 str_replace() 查找和替换特定字符串并写入相同的 js 文件

于 2012-04-27T06:44:15.120 回答
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 也有效)并删除逗号。请注意,当没有逗号时,表达式也会产生有效结果。(当你想从列表中删除最后一个元素时)

于 2012-04-27T07:30:34.093 回答