我在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 ""
}
答案 0 :(得分:1)
如果你能保证}),你需要这个正则表达式;将是最后一个。如果是这样的话:
$str = preg_replace("#\$\(window\)\.load\(function\(\) \{(.*)\}\);#is","",trim($str));
应该做的伎俩。
如果你不能保证});你想要替换将是最后一次出现,你将需要遍历你的代码并计算大括号。别无他法,遗憾的是: - (
答案 1 :(得分: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);
答案 2 :(得分:0)
$str = substr($str, 0, strlen($str) - 4);
这将删除字符串的最后3个字符。
答案 3 :(得分:0)
使用strrpos查找最后一次出现的位置?那么也许从这一点开始str_replace,限制为1?您应该通过外部调用JSlint来检查修改后的字符串,以确保您没有创建格式错误的代码。
答案 4 :(得分:0)
我认为,一种工作方式只是测试(window).load
,并添加此内容:
str_replace('$(window).load', "var functionOnLoad = ", $str);
如果要执行此功能,请不要忘记添加对此功能的调用。有些想法:
str_replace('</script>', "functionOnLoad();</script>", $str);