В регулярном выражении группы отсутствует последний матч

1

как указано в примере кода fstr, необходимо совпадение со всем появлением regEx_C и необходимо заменить некоторым динамическим значением. и убедитесь, что каждый матч должен иметь уникальное значение.

в этом примере fstr.match(regEX_C) соответствует 4 совпадениям, и мне нужно заменить на 1 динамическое значение для каждого.


  1. var_Viablecells_C = X
  2. var_IVCC_C = Y
  3. var_Viablecells_C = Z
  4. var_IVCC_C = Z1

    назначенное значение не должно соответствовать никому.


var fstr = '(Math.log(var_Viablecells_C-var_Viablecells_P)/(2-1)+ var_IVCC_C + var_Viablecells_C / var_IVCC_C)';
var regEx_C = /var_(\w+)_C/ig;
var c_val = 5.5;

function putExpValForRegExMatch(fstr, regEx, val) {
  var all_match = fstr.match(regEx);
  if (null == all_match) return fstr;
  console.log(all_match);
  for (var i = 0; i < all_match.length; i++) {
    console.log(i);
    console.log(fstr);
    var current_match = regEx.exec(fstr);
    if (current_match == null) return fstr;
    console.log(current_match);
    fstr = replaceRange(fstr, current_match.index, current_match.index + current_match[0].length - 1, '');
    fstr = replaceAt(fstr, current_match.index, val);
    console.log(fstr);
  }
  return fstr;
}

function replaceAt(string, index, replace) {
  return string.substring(0, index) + replace + string.substring(index + 1);
}

function replaceRange(s, start, end, substitute) {
  return s.substring(0, start) + substitute + s.substring(end);
}

console.log(putExpValForRegExMatch(fstr, regEx_C, c_val));
  • 0
    Я чувствую, что все, что вам нужно, это заменить все это длинное тело метода на return fstr.replace(/var_\w+_C/g, val); пожалуйста, проверьте jsfiddle.net/ymw4ccaz
  • 0
    Вы говорите, что вам нужно применять разные значения для каждого совпадения - пожалуйста, объясните требования в теле вопроса.
Показать ещё 5 комментариев
Теги:
regex-group

1 ответ

0

Вы можете просто использовать string.prototype.replace()

var fstr = '(Math.log(var_Viablecells_C-var_Viablecells_P)/(2-1)+ var_IVCC_C + var_Viablecells_C / var_IVCC_C)';
var regEx_C = /var_(\w+)_C/ig;
var c_val = 5.5;

output = fstr.replace(regEx_C,c_val)
  • 0
    Вам не нужна группа захвата с этим подходом.
  • 0
    я знаю это, но нужно применять разные значения для каждого матча

Ещё вопросы

Сообщество Overcoder
Наверх
Меню