Передача регулярного выражения в скобках функции

У меня есть строка, содержащая даты в мм-гггг; гггг-мм; форматы гггг-мм-дд и т. д. Цель состоит в том, чтобы преобразовать месячную часть подстроки даты в римскую цифровую запись, например.

12-2018 ... 2018-12-28

быть преобразованным в

XII-2018 ... 2018-XII-28

Я использую эту функцию для преобразования обычных цифр в римские:

// https://stackoverflow.com/questions/9083037/convert-a-number-into-a-roman-numeral-in-javascript
function romanize(num) {
  var lookup = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},roman = '',i;
  for ( i in lookup ) {
    while ( num >= lookup[i] ) {
      roman += i;
      num -= lookup[i];
    }
  }
  return roman;
}

Регулярное выражение, используемое для поиска подстроки месяца,

var re = /(19|20\d{2})\b-(\d{2})/g;

Первое совпадение в скобках ($1) — это только год 19YY или 20YY. Вторая ($2) — это подстрока месяца. Проблема в том, что я не могу передать $2 в качестве параметра, т.е.

string = string.replace(re, "$1-" + romanize($2));

person Samo Zaparola    schedule 28.12.2018    source источник


Ответы (1)


Вероятно, вы ищете что-то вроде:

string.replace(re, function(match, p1, p2) {
    return p1+'-'+romanize(p2);
});

Я надеюсь, что это поможет вам!

РЕДАКТИРОВАТЬ: Значение аргументов в функции() является позиционным, поэтому первый аргумент будет полным совпадением, второй - первым совпадением в скобках, третий - вторым совпадением в скобках...

Вы также можете передать уже существующую функцию для замены, например:

function rep(match, p1, p2) {
    p1+'-'+romanize(p2);
}
string.replace(re, rep);

EDIT2: чтобы найти документы, скопируйте цитируемый текст и откройте ссылку на другой вкладке вашего браузера и нажмите ctrl+f на этой странице, вставьте текст ниже и нажмите ctrl+g один раз, вы окажетесь в разделе, где это объясняется.

Указание функции в качестве параметра

Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

person sergiotarxz    schedule 28.12.2018
comment
@sergiotarxz - большое спасибо! Да, ваш пример - это то, что я искал, но не могли бы вы объяснить, как это работает - являются ли параметры анонимной функции зарезервированными ключевыми словами, как я могу найти какую-либо документацию по этому поводу? - person Samo Zaparola; 29.12.2018
comment
Я изменил ответ, чтобы ответить на ваши вопросы. - person sergiotarxz; 29.12.2018