使用正则表达式增加字符串中的数字

时间:2009-11-16 15:13:18

标签: javascript html regex

我得到一个输入元素的名称,这是一个带有数字的字符串( 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 个答案:

答案 0 :(得分:35)

怎么样:

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

我们在字符串的末尾搜索一个数字,将其强制转换为Number,将其递增1,然后将其放回字符串中。我认为你的问题甚至与你的问题相同。

参考:

答案 1 :(得分:7)

简单。使用带正则表达式的替换函数:

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

答案 2 :(得分:1)

看起来不错。您可能希望使用像^(.*?)(\d+)$这样的正则表达式,确保您抓取的数字位于字符串的末尾。

答案 3 :(得分:1)

您可以使用replace并传递一个函数来替换匹配的部分:

str.replace(/\d+/, function(number) { return parseInt(number, 10) + 1; });