jQuery: заменить последнее числовое значение в строке

158
30 сентября 2021, 23:20

Есть плагин для клонирования полей формы, в котором индекс в атрибуте name прирастает при каждом клонировании, т.е. name типа meta[go][0] в добавленном поле становится meta[go][1].

Но проблема в том, что сейчас прирастают все числовые значения, и во вложенном добавленном поле атрибут name вместо meta[go][0][to][1] становится meta[go][1][to][1].

Для инкремента используется такой метод:

var old_val = $(this).attr("name"); var new_val = old_val.replace(/-?\d+/g, function (n) { return ++n; }); $(this).attr("name", new_val);

Как в данном случае сделать так, чтобы прирастало значение только последнего индекса?

Answer 1

Найдите последнее вхождение целого числа с помощью /-?\d+(?![^]*\d)/:

var old_val = "meta[go][0][to][0]"; // $(this).attr("name"); 
var new_val = old_val.replace(/-?\d+(?![^]*\d)/, function (n) { return ++n; }); 
console.log(new_val); //$(this).attr("name", new_val);

См. пример работы регулярного выражения

Подробности

  • -? - необязательный "минус" (дефис)
  • \d+ - 1+ цифр
  • (?![^]*\d) - блок просмотра вперёд, который отменяет совпадение, если сразу после текущей позиции имеется 0 и более любых символов ([^]*, можно использовать .*, если нет символов перехода на новую строку) и затем любая цифра.
Answer 2

Цепляйте последнюю цифру в слове

/-?\d+(?=][^\[]?)/g,
READ ALSO
Не могу установить data атрибут

Не могу установить data атрибут

Есть select, который используется с плагином select2И мне надо использовать свои атрибуты

98
Не добавляеться класс через jQuery [закрыт]

Не добавляеться класс через jQuery [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

70
Не работает pagination Owl Carousel

Не работает pagination Owl Carousel

Не работают кнопки owl-prev owl-next owl-dotsУ меня подключён jQuery 2

155