2015-12-08 48 views
0

我有一個Python函數,使得整數列表包含了數字集羣字符串:的JavaScript:提取正則表達式中所有出現的字符串

def str_strip_numbers(s): 
    """ 
    Returns a vector of integer numbers 
    embedded in a string argument 
    """ 
    return [int(x) for x in re.compile('\d+').findall(s)] 

考慮,比方說,an1kb12s336z ,它返回[1,12,336]

在JavaScript中獲得相同的最佳方式是什麼?我用正則表達式撥弄了一下,但收益不大。這是不是我所希望的:

> var nn = /\d+/g 
undefined 
> nn 
/\d+/g 
> 'aba12gg4a'.search(nn) 
3 

看起來我得到了數字的位數。

+0

你不能只是拆分對任何不是一個數字,像' 「an1kb12s336z」 .split(/ \ d + /)' – adeneo

+0

你可以使用[此代碼演示](http://jsfiddle.net/8bjo2qx0/)。 –

+0

您是否使用過您提出的帖子的標題?只要做到這一點,你會找到很多答案。 – ekqnp

回答

2

搜索不是您正在尋找的功能。 String.prototype.search()返回第一個匹配結果的位置

您應改爲使用String.prototype.match:'aba12gg4a'.match(/\d+/g)。這將返回在源字符串中找到的所有匹配的數組。

+0

這不會返回一個數組數組,而是一串字符串。 –

+0

我把他的問題的實質解釋爲,他回來的價值不是他期待的那套比賽,而不是那個對象是錯誤的類型。如果他想將它們作爲數字,他總是可以使用'matches.map(function(val){return parseInt(val)})',這與他在原始Python代碼中所做的直接等價。 – mwobey

+0

非常感謝,''mwobey''! –

0

你可以試試這個。它將刪除字符串中的所有字母,並將其拆分爲數字上的數組。然後過濾掉任何不用parseInt解析的值,這意味着字符。

'aba12gg4a'.split(/[^0-9]+/).reduce(function(ret, elem){ 
     if (! isNaN(elem = parseInt(elem))){ 
      ret.push(elem); 
     } 
     return ret; 
    }, []); 
+0

這將返回一個字符串數組。 –

+0

只是看到了。編輯 – synthet1c

+0

使用我的代碼從評論。匹配比分裂更好,更接近OP在Python中的含義。 –

0
strStripNumbers: function(str) { 
    return str.match(/\d+/g).map(__.parseInt); 
} 

__意味着lodash

相關問題