2012-10-28 36 views
0

我想從我的JS函數數組中刪除一個JS函數,但我無法弄清楚它的正確的regExp。Php正則表達式爲preg_replace刪除一個文本

這是文本(功能)我想刪除:

window.addEvent('domready', function() { 

    SqueezeBox.initialize({}); 
    SqueezeBox.assign($$('a.modal'), { 
    parse: 'rel' 
    }); 
}); 

,我寫了這個代碼刪除:

<?php if (isset($this->functions['text/javascript'])) { 
     $this->functions['text/javascript'] = preg_replace('%window\.addEvent\(\'domready\',\s*function\\(\\)\s*\\{SqueezeBox\\.initialize\\(\\{\\}\\);\s*SqueezeBox\\.assign\\(\\$\\$\\(\'a\\.modal\'\\), \\{parse: \'rel\'\\}\\);\\}\\);\s*%', '', $this->functions['text/javascript']); 
     if(empty($this->functions['text/javascript'])) { 
      unset($this->functions['text/javascript']); 
     } 
    } ?> 

我不是在正則表達式那麼好,所以我」米丟失,不知道在哪裏尋找模式中的錯誤。

+0

你應該更稀疏地匹配它。使用'。*?',只需在內部查找'SqueezeBox'而不是斷言整個函數體。例如,你在'parse:'之前忘了'\ s *'。可能需要更多這些。 (但是,逃避的好工作) – mario

+0

如果你刪除了preg_replace並且只是給了「」,該怎麼辦? - 對不起,我的問題很可悲。 –

+0

一個問題是你需要使用['(PCRE_DOTALL)'flag](http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php),如果你想要* '匹配換行符。 – user113215

回答

0

正則表達式很難適應解決這類問題。我會建議輸出某種從PHP標誌變量,並用它在你的js的條件,這將去是這樣的:然後,您可以輸出var flag=truevar flag = false在你的PHP,這取決於

window.addEvent('domready', function() { 
if(flag){ 
    SqueezeBox.initialize({}); 
    SqueezeBox.assign($$('a.modal'), { 
    parse: 'rel' 
    }); 
} 
}); 

您邏輯。

+1

如果您對頁面具有這種控制權(將JavaScript注入頁面的能力),則只需在需要時使用PHP注入腳本,而不是輸出JavaScript標記。 – user113215

+0

我懷疑是否包含了一個js文件,在這種情況下,你沒有選擇性地輸出它的一部分。 –

+0

感謝這是一個好主意,但@Asad是正確的,我沒有選擇性輸出的選項。 –

0

最後我做到了。感謝大家的幫助!

這是爲我工作的最終代碼。

<?php 
    if (isset($this->functions['text/javascript'])) { 
     $this->functions['text/javascript'] = preg_replace('%window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);\s*%', '', $this->functions['text/javascript']); 
     if(empty($this->functions['text/javascript'])) { 
      unset($this->functions['text/javascript']); 
     } 
    } 
?>