代码之家  ›  专栏  ›  技术社区  ›  fire

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

  •  0
  • fire  · 技术社区  · 14 年前

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

    任何建议都太好了!

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jeffrey Blake    14 年前
    preg_match('/\$\(\'#cumulative-returns\'\)\.graph\({([^}]*)}\);/s',$input,$matches);
    

    在这之后, $matches[0] 将具有与regex匹配的值(包括周围的文本)和 $matches[1] 只需文本 $('#cumulative-returns').graph({ }); 角色。

    此外,可能更有用的是:

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

    matches[0][n] 反映第n个匹配项(包括周围的文本)和 $matches[1][n] $('#[any-text]').graph({ });

        2
  •  0
  •   NimChimpsky    14 年前

    创建一个变量来保存x\u数据 然后操纵这个变量。。。

    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']
                });