0

我在 php 中有一个字符串,看起来像这样

$(window).load(function(){
  $('.someclass').click(function () {
    $(this).text("clicked");
  });
});

我想要的是 - 如果字符串包含然后用空字符串$(window).load(function(){替换这个以及结束括号});""

但如果$(window).load(function(){不存在,则什么也不做。

这是我尝试过的:

if(strpos($str,"$(window).load(function(){") == -1){
  // do nothing
}
else{
     str_replace("$(window).load(function(){","",$str);
     // how do i replace the last }); with ""
}
4

5 回答 5

1

如果您可以保证 }); 将是最后一个。如果是这样的话:

$str = preg_replace("#\$\(window\)\.load\(function\(\) \{(.*)\}\);#is","",trim($str));

应该做的伎俩。

如果您不能保证 }); 您要替换将是最后一次出现,您将不得不遍历您的代码并计算大括号。没有别的办法,可悲的是:-(

于 2013-03-28T14:20:57.027 回答
1

如果您的代码像这样很好地缩进,这可能对您有用:

$str = <<<EOM
$(window).load(function(){
  $('.someclass').click(function () {
    $(this).text("clicked");
  });
});
EOM;

$start = preg_quote('$(window).load(function(){');
$end = preg_quote('});');

$new = preg_replace("/^$start\s*(.*?)^$end/ms", '$1', $str);

print_r($new);
于 2013-03-28T14:25:57.533 回答
0
$str = substr($str, 0, strlen($str) - 4);

这将删除字符串的最后 3 个字符。

于 2013-03-28T14:21:56.050 回答
0

用strrpos找到最后一次出现的位置?然后也许从那一点做一个 str_replace 限制为1?您应该通过对 JSlint 之类的外部调用来检查修改后的字符串,以确保您没有创建格式错误的代码。

于 2013-03-28T14:22:41.480 回答
0

我认为,一种工作方式就是测试(window).load并添加:

str_replace('$(window).load', "var functionOnLoad = ", $str);

如果您希望执行此函数,请不要忘记添加对该函数的调用。有人认为:

str_replace('</script>', "functionOnLoad();</script>", $str);
于 2013-03-28T14:34:16.317 回答