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

Php 如何删除JavaScript文件中字符串的特定部分,php,arrays,parsing,Php,Arrays,Parsing,使用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

使用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()打开文件,但如果事先不知道行的外观,我就不知道要替换什么字符串。有什么想法吗?

试试这个:

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

使用PHP操作JavaScript文件意味着JavaScript不再是一个静态文件,也不能再被浏览器缓存,因此每次都必须重新下载

最好完全从JavaScript文件中取出
times
数组,并使PHP代码在页面标题中生成一个额外的
标记,该标记仅定义该变量。这样,时间可以动态生成,而其余JavaScript代码保持静态。

尝试fopen()方法并在php变量中获取所有文件内容,然后可以使用str_replace()对于查找和替换特定字符串并写入同一js文件,如果您只想替换此特定行上的事件,您可能需要为此使用
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 );
?>

正则表达式构建得相当复杂,以允许在匹配时具有一定的灵活性。它允许任意空格(对于JS也是有效的),如果该值位于列表中间,则删除逗号。请注意,当没有逗号时,表达式也会生成有效的结果。(当您想从列表中删除最后一个元素时)

无论如何,每次都会重新下载JavaScript文件,所以我不担心它是动态的。即使我按照你的方式来做,我怎么才能去掉8:00 | 8:00呢?当你用PHP代码动态构建它时,不要将8:00条目放入其中。但是我如何保持文件的其余部分不变;这很容易用PHP代码操作。要么从空数组开始,然后只添加所需的条目,要么从“full”数组开始,删除不需要的条目。任何一个数组,一旦你有了你想要的PHP数组,循环这个PHP数组并打印出组成JavaScript数组的方括号、引号、时间值等。记住JavaScript代码对于PHP来说只是一个字符串。您可以使用PHP
echo
语句生成“
times[1]=
”行。这很好,但在不同的行上可能有多个“8:20 | 8:20”。我只想删除8:20 | 8:20准时[1]。在这种情况下,您必须向replace函数传递更多智能。移除哪一个,preg_替换将是首选。我必须说这将是困难的。你不能从你的数据库/源中删除这个变量吗?你正在第一个地方填充js文件吗?那会容易得多。:)谢谢,这正是我要找的!
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"]