2011-07-18 41 views
2

我有這個字符串:如何從此字符串中獲取數字?

var s = 'http://xxxxxxx.xxx/abcd123456789?abc=1'; 

如何獲得數字123456789(之間的 「d」 和 「?」)?

這些數字可能會有所不同。數字的數量也可能會有所不同。

我如何得到它們?正則表達式?哪一個?

回答

5

嘗試

'http://xxxxxxx.xxx/abcd123456789?abc=1'.match(/\d+(?=\?)/)[0]; 
//            ^1 or more digits followed by '?' 
+0

超前匹配(「?=」)僅適用於JavaScript 1.5,因此對於較舊的瀏覽器,您可能會考慮使用「?」前瞻性匹配並從匹配結果中剝離最後一個字符。 –

+0

@Anndrew:是的,就像''http://xxxxxxx.xxx/abcd123456789?abc=1'.match(/ \ d + \?/)[0] .match(/ \ d + /)[0]' – KooiInc

+0

@安德魯:順便說一句,你能指出我的來源嗎?我看到遠遠早於js1.2描述的前瞻(例如https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions) – KooiInc

1

嘗試

var regexp = /\/abcd(\d+)\?/; 
var match = regexp.exec(input); 
var number = +match[1]; 
+0

你的正則表達式是不正確的。根據jsbin.com – DrStrangeLove

+0

@DrStrangeLove:錯字固定。 – marc

0

是數字總是 「ABCD」 和 「?」 之間?

如果是這樣,那麼你可以使用substring()

s.substring(s.indexOf('abcd'), s.indexOf('?')) 

如果沒有,那麼你可以通過文字環由性格和檢查它是否是數字:

var num = ''; 

for (var i = 0; i < s.length; i++) { 
    var char = s.charAt(i); 
    if (!isNaN(char)) { 
    num += char; 
    } 
} 
0

是的,正則表達式是正確答案。你會有這樣的事情:

var s = 'http://xxxxxxx.xxx/abcd123456789?abc=1'; 
var re = new RegExp('http\:\/\/[^\/]+\/[^\d]*(\d+)\?'); 
re.exec(s); 
var digits = $1; 
相關問題