【问题标题】:How to remove a particular part of a string in a JavaScript file如何删除 JavaScript 文件中字符串的特定部分
【发布时间】:2012-04-27 06:33:10
【问题描述】:

使用 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 arrays parsing


    【解决方案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 );
    ?>
    

    希望对你有帮助。

    【讨论】:

    • 这很好,但不同的行上可能有多个“8:20|8:20”。我只想删除 8:20|8:20 on time[1] 而已。
    • 在这种情况下,您必须将更多智能传递给替换功能。要删除哪一个,preg_replace 将是首选。我必须说这将是困难的。你不能从你的数据库/源中删除这个变量,因为你首先要填充 js 文件吗?那会容易很多。 :)
    【解决方案2】:

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

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

    【讨论】:

    • JavaScript 文件每次都会重新下载,所以我不担心它是动态的。即使我按照你的方式做,我怎么能把 8:00|8:00 排除在外?
    • 当您使用 PHP 代码动态构建它时,只是不要将 8:00 条目 放入 中。
    • 但是我如何保持文件的其余部分不变。
    • 把时间放在 PHP 数组中;这很容易使用 PHP 代码进行操作。要么从一个空数组开始,然后只添加你想要的条目,要么从“完整”数组开始,然后删除你不想要的条目。任一数组,一旦您的 PHP 数组只包含您想要的时间,循环遍历该 PHP 数组并打印构成 JavaScript 数组的括号、引号、时间值等。
    • 请记住,就 PHP 而言,JavaScript 代码只是一个字符串。您可以使用 PHP echo 语句生成“times[1]=”行。
    【解决方案3】:

    如果您想只替换此特定行上的出现,您可能需要为此使用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 也有效)并删除逗号,如果值在列表的中间。请注意,当没有逗号时,表达式也会产生有效结果。 (当你想从列表中删除最后一个元素时)

    【讨论】:

    • 谢谢,这正是我要找的!
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2019-11-17
      • 2014-07-03
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      相关资源
      最近更新 更多