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

Javascript regexp:用f($1)替换$1

  •  2
  • Charles  · 技术社区  · 14 年前

    我有一个正则表达式,比如 /url.com\/([A-Za-z]+)\.html/ ,我想用 new string $1: f($1) ,即,对于包含两个插值的常量字符串,捕获的字符串和捕获的字符串的函数。

    在JavaScript中,最好的方法是什么这里的Best意味着(1)最不容易出错,(2)在空间和速度方面最有效,(3)最适合JavaScript的习惯用法,特别强调#3。

    3 回复  |  直到 14 年前
        1
  •  8
  •   SLaks    14 年前

    这个 replace 方法可以 take a function as the replacement parameter .

    例如:

    str.replace(/regex/, function(match, group1, group2, index, original) { 
        return "new string " + group1 + ": " + f(group1);
    });
    
        2
  •  5
  •   deceze    14 年前

    使用时 String.replace ,你可以 supply a callback function 作为替换参数而不是字符串并创建自己的非常自定义的返回值。

    'foo'.replace(/bar/, function (str, p1, p2) {
        return /* some custom string */;
    });
    
        3
  •  4
  •   Nick Craver    14 年前

    .replace() 接受替换的函数,如下所示:

    var newStr = string.replace(/url.com\/([A-Za-z]+)\.html/, function(all, match) {
      return match + " something";
    });
    

    您可以随意转换结果,只需返回您希望匹配项位于该回调中的任何内容。 You can test it out here .