用php解析javascript文本

用php解析javascript文本,php,javascript,parsing,Php,Javascript,Parsing,你好!我听说过各种捕获和返回文本的方法。例如正则表达式。我对PHP有点陌生,但我想知道如何使用PHP从这个JavaScript代码中捕获并返回文本。我只对捕获msgBody、msgTitle和insertDate感兴趣。谢谢你关注我的问题 function wibiyaNotifierLoad() { if (typeof(jQuery.cookie) == 'function') { loadjscssfile("Graphics_Toolbar/Notifier/no

你好!我听说过各种捕获和返回文本的方法。例如正则表达式。我对PHP有点陌生,但我想知道如何使用PHP从这个JavaScript代码中捕获并返回文本。我只对捕获msgBody、msgTitle和insertDate感兴趣。谢谢你关注我的问题

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
        };

我经常使用preg_replace函数来捕获我想要的一些数据。您可以在这里尝试:

此网站提供了一些工具,您可以使用这些工具磨练正则表达式技能


当你说解析时,你应该看看J4P5。但在这里,你可能会得到一个不精确的解和正则表达式。要捕获文本,然后提取单个值,请执行以下操作:

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

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

可以通过以“\[\{通知”开头使正则表达式更加明确:”(\[\{但是。

对于单个正则表达式捕获所需数据,可以使用以下模式(注意,插入代码时需要反斜杠和引号):

密钥的名称将在子捕获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);

你所说的“捕获”到底是什么意思?在什么上下文中?你是在准备Ajax调用,还是在分析源文件?@jimmy:是的,刚刚测试过。右括号中的错误。修复了。
<?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);
 preg_match('/\[(.*?)\]/s', $javascript, $match);
 $json = json_decode($match[1]);
 print $json->{'msgBody'};
 print $json->{'msgTitle'};
 print $json->{'insertDate'};