dr2898 2013-04-02 10:42
浏览 33
已采纳

正则表达式提取javascript方法调用

I have created string extractor for translations from javascript files. I found jsgettext project which I used as a starting point (see).

It uses reqular expression to find calls to __() method inside javascript files. The simple calls are found successfully, but calls with arguments like __('string', { a: 'b'}) are not.

I tried to modify the regular expression to match also method calls with arguments, but without any success (I'm not regular expressions expert).

My question is: How to modify following regular expression to match strings like this?

// this is catched successfully 
// var string = __("Please enter %number% more characters.");

// this is problematic
var string = __("Please enter %number% more characters.", { '%number%' : 2 });

Regular expression:

 $keywords = join('|', array('__'));
 preg_match_all('# (?:' . $keywords . ') \(\\ *" ( (?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\" )* ) (?<!\\\\)"\\ *\) #ix', $content, $matches, PREG_SET_ORDER);

Thank you

  • 写回答

1条回答 默认 最新

  • dtv995719 2013-04-02 10:51
    关注

    I don't think you really need to match whole call like:

    __("Please enter %number% more characters.", { '%number%' : 2 });
    

    You just need to match:

    __("Please enter %number% more characters.",
    

    And leave the rest as it is because those are only arguments that shouldn't be part of translation inside database.

    Therefore editing regular expression on lines 81 and 89 to finish with *(?:\)|,) #ix instead of *\) #ix should be good enough.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?