Передача регулярного выражения в скобках в функцию - PullRequest
0 голосов
/ 29 декабря 2018

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

12-2018 ... 2018-12-28

для преобразования в

XII-2018 ... 2018-XII-28

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

// /7658409/preobrazovat-chislo-v-rimskuy-tsifru-v-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));

1 Ответ

0 голосов
/ 29 декабря 2018

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

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

Надеюсь, это вам поможет!

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

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

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

РЕДАКТИРОВАТЬ 2: Чтобы найти документы, скопируйте цитируемый текст и откройте ссылку на другой вкладке вашего браузера и нажмите Ctrl + F на этой странице, вставьте текст ниже и нажмите Ctrl + G один раз, вы окажетесь в разделе, гдеэто объясняется.

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

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

...