Увеличьте число в строке с помощью регулярного выражения - PullRequest
11 голосов
/ 16 ноября 2009

Я получаю имя элемента ввода, представляющего собой строку с номером (url1). Я хочу увеличить число на 1 (url2) самым простым и быстрым способом.

Мой способ - получить \d / restofstring, ++ соответствие, а затем собрать число с restofstring. Есть ли лучший способ?

Обновление:

Мой окончательный (фиктивный) код стал:

var liNew = document.createElement('li'); 
liNew.innerHTML = liOld.innerHTML; 
var els = Y.Dom.getChildrenBy(liNew, function(el) { 
    return el.name.match(/\d+$/); 
} // YUI method where the function is a test 
for (var i = 0, el; el = els[i]; i++) { 
    el.name = el.name.replace(/\d+$/, function(n) { return ++n }); 
} 
list.appendChild(liNew); 

Ответы [ 4 ]

35 голосов
/ 16 ноября 2009

Как насчет:

'url1'.replace(/\d+$/, function(n){ return ++n }); // "url2"
'url54'.replace(/\d+$/, function(n){ return ++n }); // "url55"

Там мы ищем число в конце строки, приводим его к Number, увеличиваем его на 1 и помещаем обратно в строку. Я думаю, это то же самое, что вы сформулировали в своем вопросе даже.

Справка:

7 голосов
/ 16 ноября 2009

Simple. Используйте функцию подстановки с регулярными выражениями:

s = 'abc99abc';
s = s.replace(/\d+/, function(val) { return parseInt(val)+1; });

установит переменную s в: abc100abc

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

s = '?foo=10&bar=99';
s = s.replace(/[&?]bar=\d+/, function(attr) {
  return attr.replace(/\d+/, function(val) { return parseInt(val)+1; });
});

установит переменную s в: ?foo=10&bar=100

1 голос
/ 16 ноября 2009

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

str.replace(/\d+/, function(number) { return parseInt(number, 10) + 1; });
1 голос
/ 16 ноября 2009

выглядит хорошо. Возможно, вы захотите использовать регулярное выражение, например ^(.*?)(\d+)$, чтобы убедиться, что число, которое вы захватываете, находится в конце строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...