2011-03-25 80 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'};