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 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解