2015-08-27 6 views
0

Читает Дуглас Крокфорд в хороших частей, но я не могу понять этот код:Метод javascript replace() принимает функцию, которая принимает 2 параметра?

return this.replace(/&([^&;]+);/g, 
        function(a, b) { 
         var r = entity[b]; 
         return typeof r === 'string' ? r : a; 
         } 
        ); 

Все, что я видел, использую str.replace с функцией, которая принимает один параметр. Что происходит, когда есть два параметра, откуда берутся два параметра?

+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

+0

Постоянная ссылка заменить https: //developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace # Specifying_a_function_as_a_parameter – TbWill4321

+0

не могли бы вы взглянуть на него, пожалуйста - http://stackoverflow.com/a/15237211/4608582 –

ответ

1

При передаче функции в качестве второго параметра, параметры данной функции являются Клири описано here:

п-й скобки строки submatch, при условии, что первый аргумент заменить() был объект RegExp , (Соответствует $ 1, $ 2 и т. Д. Выше). Например, если задано/(\ a +) (\ b +) /, p1 является совпадением для \ a + и p2 для \ b +.

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);

Смежные вопросы