2011-06-26 56 views
2

我已經使用正則表達式來抓取並閱讀了一些教程,我似乎無法得到一個可靠的正則表達式來執行此操作。JavaScript正則表達式來查找PHP標籤

我需要做的是編寫一個JavaScript正則表達式來匹配字符串中的PHP標籤。

我已經繼承了一個大型的PHP項目,混合html和php的視圖不太可讀。所以我在做的是爲我自己的個人使用編寫一個IDE擴展,去除混合在php視圖中的php,以便在其上運行HTML縮進腳本而不會混淆HTML縮進腳本。然後,縮進腳本完成後,我回去重新插入PHP。

我到目前爲止是這樣的(我轉換這從一個正則表達式,以查找括號[],我知道這將不匹配的一切,但它讓我遠遠不夠充實我的IDE擴展名):

var php_tag_pattern = /<\?[^<>]*\?>/; 

現在顯而易見的原因是不匹配的代碼是這樣的:

<?=$common->format_number($acct_info['number'])?> 

或本:

<? 
$wifi = $wifi_lib->wifi_radius($v['radiusgroupname']); 
if (!empty($wifi)) :?> 

我在過去的幾個小時裏一直在搞這個,所以我想我最終會尋求幫助,看看我錯過了什麼。

謝謝!

+0

您的IDE不能爲您設置格式化代碼嗎? – 2011-06-26 15:57:33

+0

我已經嘗試了幾個IDE,他們沒有很好地格式化混合的HTML和PHP文件。如果你知道我會很樂意開始使用它。 – programmer

回答

5

要匹配多行php文本,您需要在Javascript中使用DOTALL。不幸的是,Javascript沒有s標誌,但有一個解決方法。試試這個代碼:

var php_tag_pattern = /<\?[=|php]?[\s\S]*?\?>/; 

[\s\S]將確保匹配多行的php文本,包括新行。

+0

這個工程!非常感謝anubhava! – programmer

+0

非常歡迎,很高興它解決了。 – anubhava

+1

對於好奇,*?使正則表達式懶惰,所以它會停在第一個關閉?>標記而不是最後一個。 – Dwayne

0
var php_tag_pattern = /<\?=?.+?\?>/; 
0
var regex = /<\?[=|php]?[^<>]*\?>/; 

您還需要使用多修飾符new RegExp(regex, "gim")。 'g'是全球性的,'i'不區分大小寫,'m'多行。