我得到一个输入元素的名称,这是一个带有数字的字符串( 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);
答案 0 :(得分:35)
怎么样:
'url1'.replace(/\d+$/, function(n){ return ++n }); // "url2"
'url54'.replace(/\d+$/, function(n){ return ++n }); // "url55"
我们在字符串的末尾搜索一个数字,将其强制转换为Number
,将其递增1,然后将其放回字符串中。我认为你的问题甚至与你的问题相同。
参考:
String.prototype.replace
- 可以使用正则表达式答案 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; });