在JS中有如下语句
“str = str.replace(/<img([^>]*src[^>]*)>/ig, function($1, $2) {return imgtag($2);});”
因为在正则表达式中replace方法的新文本里可以含$1、$2这样的子匹配标记,所以上面的JS语句里,直接用函数运算了该子匹配并得出结果,用以替换原文本。请问在DELPHI中该如何实现上面的代码。已经在DELPHI中注册了VBScript_RegExp_55_TLB 用做正则运算。

解决方案 »

  1.   

    //大概是这样uses ComObj;procedure TForm1.btn1Click(Sender: TObject);
    var
      vRegExp, vMatch, vMatches: OleVariant;
      I: Integer;
    begin
      vRegExp := CreateOleObject('VBScript.RegExp'); // 创建正值对象
      vRegExp.Pattern := '<img([^>]*src[^>]*)>'; // 样板表达式
      vRegExp.IgnoreCase := True; // 忽略大小写
      vRegExp.Global := True; // 全局适用
      Caption := vRegExp.Replace('<img src="http://www.csdn.net/log.jpg">',
        'function($1, $2) {return imgtag($2);});');
    end;
      

  2.   

    楼上的回复有问题
    Caption := vRegExp.Replace('<img src="http://www.csdn.net/log.jpg">',
        'function($1, $2) {return imgtag($2);});');其中“function($1, $2) {return imgtag($2);}”是段JS脚本,在DELPHI里无法执行的。
      

  3.   

    delphi本身是不支持 正则表达式的,必须下载RegExp单元
    使用和其他语言种差不多的
      

  4.   

    已经使用了REGEXP单元,重点不是正则,而是语句中的“function($1, $2) {return imgtag($2);}”因为$1, $2 是在正则运算中生成的,但这里又把它们进行了函数运算,返回值才进行了最后的替换。
    DELPHI语言没有JS那样灵活,所以不会用DELPHI来表达这样的语句。