2009-11-16 57 views
9

我得到一個輸入元素的名字,這是一個帶有數字的字符串(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

呃,你不能只改變IE中的表單元素名稱。你會遇到問題:http://stackoverflow.com/questions/1650797/setting-name-of-dom-created-element-fails-in-ie-workaround – 2009-11-16 16:13:23

+0

好的,謝謝你的頭。如果我最終需要爲此支持IE,我將使用YUI元素。 – 2009-11-16 16:33:59

回答

32

如何:

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

在那裏,我們在字符串的結尾搜索數,將其轉換爲Number,由1遞增它,並把它放回的字符串中。我認爲這就是你甚至在你的問題中所說的同一個算法。

參考:

+0

謝謝,我用我的解決方案更新了問題 – 2009-11-16 15:55:56

+2

這是一個美麗的解決方案。 – Dwayne 2013-05-28 02:56:14

+2

這是一個稍作修改的版本,適用於字符串中的所有數字:'「url5part6」。替換(/ \ d +/g,function(n){return ++ n}); //返回「url6part7」' – starbeamrainbowlabs 2014-11-27 09:23:34

1

看起來OK。您可能需要使用像^(.*?)(\d+)$這樣的正則表達式,確保您抓取的數字位於字符串的末尾。

7

簡單。使用替代功能使用正則表達式:

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

將設置可變小號到:abc100abc

但它可以讓你要確保你只在URL中更改某個參數更加複雜:

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

將設置可變小號到:?foo=10&bar=100

+1

嗯,問題不是關於獲取參數? – 2009-11-16 15:39:11

+0

如果你仔細閱讀這個問題,提問者沒有具體說明他想要改變什麼;甚至沒有那個數字會在URL的末尾* - 他只是用在他的例子中。我想通過改變GET參數可能是一種可能的用例。 – intgr 2009-11-16 16:33:59

+0

「輸入元素的名稱」='' – 2009-11-16 16:44:11

1

您可以使用replace,並通過它的功能,用於替換匹配的部分:

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