一些漂亮的正则表达式来解析HTML中的一些JavaScript

时间:2010-07-16 14:56:26

标签: php regex

我有一些看起来像这样的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']
        });
    });

我需要做的是使用PHP中的一些漂亮的正则表达式将x_datay_data替换为新值。

到目前为止,这是我想出的正确图表,但即使这样也行不通。

$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);

任何建议都会很棒!

*编辑:

请忽略其javascript这一事实,我只需要一些正则表达式来查找$('#cumulative-returns').graph({});字符之间的字符串!

2 个答案:

答案 0 :(得分:1)

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]反映了$('#[any-text]').graph({});

之间的第n个文本实例

答案 1 :(得分:0)

创建一个变量来保存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']
            });