javascript replace()方法需要带2个参数的函数吗?

时间:2015-08-27 22:07:00

标签: javascript

我正在阅读Douglas Crockford的 Good Parts ,但我无法理解这段代码:

  public static bool IsDebug(this HtmlHelper htmlHelper)
    {
#if DEBUG
      return true;
#else
      return false;
#endif
    }
Then used it in my views like so:

            <section id="sidebar">
              @Html.Partial("_Connect")
@if (!Html.IsDebug())
{ 
              @Html.Partial("_Ads")
}
              <hr />
              @RenderSection("Sidebar", required: false)
            </section>

我所看到的只是使用带有一个参数的函数的return this.replace(/&([^&;]+);/g, function(a, b) { var r = entity[b]; return typeof r === 'string' ? r : a; } ); 。当有两个参数时会发生什么,这两个参数来自哪里?

1 个答案:

答案 0 :(得分:0)

replace中你可以specify a function as a parameter

该函数的参数是: match, submatch1, submatch2, ..., offset, string

其中

  • match是整场比赛
  • submatch1, submatch2, ...是与各个带括号的捕获组匹配的字符串
  • offset是匹配字符串在整个字符串中开始的位置
  • string是正在检查的整个字符串

当然,函数的参数数量取决于正则表达式中的捕获组数量

在您的示例中,有一个组,因此该函数最多可以包含4个参数。

myString = "a&b;c a&&c;; ab;&;c";

myString = myString.replace(/&([^&;]+);/g, 
                    function(param0,param1,param2,param3) {
                        document.write("param0 = " + param0 + " (match)<br>");
                        document.write("param1 = " + param1 + " (first submatch)<br>");
                        document.write("param2 = " + param2 + " (offset)<br>");
                        document.write("param3 = " + param3 + " (whole string)<br>");    
                        document.write("<br>");
                        return "[" + param0 + "]";
                        }
                    );

document.write(myString);