【问题标题】:parse javascript text with php用 php 解析 javascript 文本
【发布时间】:2011-03-25 10:52:17
【问题描述】:

您好!我听说过各种捕获和返回文本的方法。例如正则表达式。我对 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
        };

【问题讨论】:

  • “捕获”到底是什么意思?在什么情况下?您是在准备 Ajax 调用,还是在解析源文件?

标签: php javascript parsing


【解决方案1】:

当您说解析时,您应该查看 J4P5。但是您可能可以在这里使用不精确的解决方案和正则表达式。捕获文本然后提取单个值:

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

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

可以通过以'#"notifications": (\[\{ 开头来使正则表达式更加明确。

【讨论】:

  • @jimmy:是的,刚刚测试过。右括号哪里错了。固定。
【解决方案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);

【讨论】:

    【解决方案3】:
     preg_match('/\[(.*?)\]/s', $javascript, $match);
     $json = json_decode($match[1]);
     print $json->{'msgBody'};
     print $json->{'msgTitle'};
     print $json->{'insertDate'};
    

    【讨论】:

      【解决方案4】:

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

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

      本网站提供了可用于磨练正则表达式技能的工具

      http://gskinner.com/RegExr/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 2011-04-08
        • 2020-01-17
        • 1970-01-01
        相关资源
        最近更新 更多