2011-03-25 72 views
2

問候!我聽說過各種方法來捕獲和返回文本。例如正則表達式。我對PHP稍微陌生,但我想知道如何使用PHP捕獲並從此JavaScript代碼返回文本。我只對捕獲msgBody,msgTitle和insertDate感興趣。感謝您看我的問題用php解析javascript文本

function wibiyaNotifierLoad() { 
    if (typeof(jQuery.cookie) == 'function') { 
     loadjscssfile("Graphics_Toolbar/Notifier/notifier_2.css?v2", "css", "head"); 
     var data = { 
      "count": 1, 
      "notifications": [{ 
       "Id": "264727", 
       "toolbarId": "602582", 
       "msgId": "9", 
       "msgTitle": "Its that time of year!", 
       "msgBody": "check you email for updates!", 
       "msgLink": "", 
       "msgImage": "", 
       "filter": "", 
       "startDate": "2011-03-22 23:00:00", 
       "expirationDate": "2011-03-23 00:00:00", 
       "active": "1", 
       "insertDate": "2011-03-22 23:12:31" 
      }], 
      "ok": true 
     }; 
+3

準確地說,「捕獲」是什麼意思?在什麼情況下?你正在準備一個Ajax調用,還是解析源文件? – 2011-03-25 10:56:25

回答

2

當你說解析,你應該看看J4P5工具。但是你可能會在這裏得到一個不精確的解決方案和正則表達式。要捕獲文本,然後提取每個值:

preg_match('#(\[\{.*?\}\])#s', $javascript, $match); 
$values = json_decode($match[1], TRUE); 

$msgBody = $values[0]["msgBody"]; 

能否把用然而'#"notifications": (\[\{啓動它的正則表達式更加明確。

+0

不錯的一個,我想過相同的json_decode()解決方案。 +1 – 2011-03-25 11:03:55

+0

謝謝,但是當我測試你的方法,我得到「NULL」 – jimmy 2011-03-25 11:57:52

+0

@jimmy:真的,只是測試。右括號錯誤。固定。 – mario 2011-03-25 12:02:04

2

對於單一的正則表達式來獲取你需要的數據,你可以使用下面的模式(注意,這需要反斜線和報價的時候插入代碼轉義):

/(["'])(msgBody|msgTitle|insertDate)\1\s*:\s*(['"])((?:[^'"\\]+|\\.|(?!\3|\\).)*)\3/s 

密鑰的名稱將在子捕獲2和子捕獲4例如實際的內容,讓我們假設你的JavaScript存儲在$text,你可以使用下面的PHP代碼中提取信息:

<?php 

$regex = '/(["\'])(msgBody|msgTitle|insertDate)\\1\\s*:\\s*([\'"])((?:[^\'"\\\\]+|\\\\.|(?!\\3|\\\\).)*)\\3/s'; 
preg_match_all($regex, $text, $match, PREG_SET_ORDER); 

$data = array(); 

foreach ($match as $cap) 
{ 
    $data[$cap[2]] = $cap[4]; 
} 

var_dump($data); 
+0

感謝一堆! – jimmy 2011-03-25 11:31:02

2
preg_match('/\[(.*?)\]/s', $javascript, $match); 
$json = json_decode($match[1]); 
print $json->{'msgBody'}; 
print $json->{'msgTitle'}; 
print $json->{'insertDate'};