разбирать текст javascript с помощью php - PullRequest
2 голосов
/ 25 марта 2011

Привет!Я слышал о различных методах захвата и возврата текста.Например, регулярные выражения.Я немного новичок в PHP, но мне было интересно, как я собираю и возвращаю текст из этого кода JavaScript, используя PHP.Я заинтересован только в захвате 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
        };

Ответы [ 4 ]

2 голосов
/ 25 марта 2011
 preg_match('/\[(.*?)\]/s', $javascript, $match);
 $json = json_decode($match[1]);
 print $json->{'msgBody'};
 print $json->{'msgTitle'};
 print $json->{'insertDate'};
2 голосов
/ 25 марта 2011

Когда вы говорите, разбор, вы должны смотреть в J4P5. Но вы, вероятно, можете сойтись с неточным решением и регулярными выражениями здесь. Чтобы захватить текст, а затем извлечь отдельные значения:

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

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

Может сделать регулярное выражение более явным, начав с '#"notifications": (\[\{.

2 голосов
/ 25 марта 2011

Для одного регулярного выражения для сбора нужных вам данных вы можете использовать следующий шаблон (обратите внимание, что при вставке в код необходимо использовать обратную косую черту и кавычки для экранированного символа):

/(["'])(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 голосов
/ 25 марта 2011

Я часто использую функцию preg_replace, чтобы захватить некоторые данные, которые я хочу.Вы можете попробовать это здесь:

http://www.functions -online.com / preg_replace.html

Этот веб-сайт предоставляет инструменты, которые вы можете использовать, чтобы отточить свои навыки регулярного выражения

http://gskinner.com/RegExr/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...