Некоторое изящное регулярное выражение для анализа некоторого JavaScript внутри HTML - PullRequest
0 голосов
/ 16 июля 2010

У меня есть некоторый HTML, который выглядит следующим образом:

    $(document).ready(function(){
        $('#cumulative-returns').graph({
            width: 400,
            height: 180,
            type: 'bar',
            x_label: 'Month',
            x_data: ['Jan','Feb','Mar','Apr'],
            y_label: 'Cumulative Return',
            y_data: ['5','10','15','20'],
            colors: ['666666', '000000', 'ff0000', '333366']
        });

        $('#new-returns').graph({
            width: 400,
            height: 180,
            type: 'bar',
            x_label: 'Month',
            x_data: ['Jan','Feb','Mar','Apr'],
            y_label: 'Cumulative Return',
            y_data: ['5','10','15','20'],
            colors: ['666666', '000000', 'ff0000', '333366']
        });
    });

Что мне нужно сделать, это заменить x_data и y_data новыми значениями с использованием некоторого изящного регулярного выражения в PHP.

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

$graph = "cumulative-returns";
$start_tag = '$(\'#'.$graph.'\').graph({';
$end_tag = '});';
preg_match_all("/".preg_quote($start_tag)."(.+?)".preg_quote($end_tag)."/i", $html, $matches);
print_r($matches);

Любые предложения будут великолепны!

* edit:

Пожалуйста, игнорируйте тот факт, что его javascript, мне просто нужно некоторое регулярное выражение, чтобы найти строку между $('#cumulative-returns').graph({ и }); символов!

Ответы [ 2 ]

1 голос
/ 17 июля 2010
preg_match('/\$\(\'#cumulative-returns\'\)\.graph\({([^}]*)}\);/s',$input,$matches);

После этого $matches[0] будет иметь значения, совпадающие с регулярным выражением (включая окружающий текст), а $matches[1] будет иметь только текст между $('#cumulative-returns').graph({ и }); символов.

Также, возможно, более полезным было бы:

preg_match_all('/\$\(\'#[^\']*\'\)\.graph\({([^}]*)}\);/s',$input,$matches);

После чего matches[0][n] отражает n-е совпадение (включая окружающий текст), а $matches[1][n] отражает n-й экземпляр текста между $('#[any-text]').graph({ и });

0 голосов
/ 16 июля 2010

создайте переменную для хранения данных x_data Затем просто манипулируйте этой переменной ...

var myvar = ['dec', 'may', 'whatever', 'whatver' ]
    $('#cumulative-returns').graph({
                width: 400,
                height: 180,
                type: 'bar',
                x_label: 'Month',
                x_data: myvar,
                y_label: 'Cumulative Return',
                y_data: ['5','10','15','20'],
                colors: ['666666', '000000', 'ff0000', '333366']
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...