2010-07-19 36 views
1

我遇到了實際困難,但我不是JavaScript專家。我想要做的就是讓一個匹配給定regExp的字符串中的所有匹配數組。正則表達式爲:在javascript中使用正則表達式提取整數陣列

[0-9]+ 

即。任何整數。

所以如果我通過字符串 「12 09:8:76 ::: 54 12」 我應該得到

ARR [0] = 「12」 ARR [1] = 「09」 ARR [ 2] = 「8」 ARR [3] = 「76」 ARR [4] = 「54」 ARR [5] = 「12」

容易嗎?不適合我!我可以在vb.net中做到這一點沒有問題regexp.matches(字符串)(類似的東西)。我認爲JavaScript方法.exec也會給我一個數組,但它只返回第一個匹配。這是怎麼回事?代碼...

function testIt(){ 
    splitOutSelection2("123:::45 0::12312 12:17"); 
} 


function splitOutSelection2(sSelection){ 
    var regExp = new RegExp("[0-9]+","g"); 
    var arr = regExp.exec(sSelection); 
}; 

回答

0

所有的答案工作,但我想保持我的RegExp對象,而不是在使用的時候指定。所以簡單地更改功能...

function splitOutSelection2(sSelection){ 
    var regExp = new RegExp("[0-9]+","g"); 
    var arr = sSelection.match(regExp); 
}; 

..我在找什麼。謝謝你指出我正確的方向,儘管對所有回答的人。

3
arr = sSelection.match(/[0-9]+/g); 

應該做的。

g是您需要獲取所有匹配的全局修改器,而不僅僅是第一個。

+0

謝謝,這個工程。我意識到我應該使用match而不是exec。我在我的regExp聲明中指定了全局修飾符。但這是關鍵。我的代碼可以被重寫爲.. function splitOutSelection2(sSelection)varregExp = new RegExp(「[0-9] +」,「g」); var arr = sSelection.match(regExp); }; – 2010-07-19 09:27:28

1

類似:

var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g); 
alert(arrMatch); 

如果全球設置(並找到匹配的當然).match會返回一個數組。 [0-9] +意味着它將搜索不僅個位數,而且還搭配12,09,76

+0

謝謝。我最初認爲這場比賽沒有奏效,但它並沒有奏效,因爲我沒有設置g旗。這就是爲什麼我放棄了不正確的執行路線。 – 2010-07-19 09:28:52

1

根據對於doc,exec返回第一場比賽。您應該使用匹配。

var arr = sSelection.match(/[0-9]+/g); 

var arr = sSelection.match(/\d+/g); 
0
function splitOutSelection2(sSelection){ 
    return sSelection.split(/[^0-9]+/g); 
}; 

取反regExp並使用String#split。

+0

謝謝,我相信這也會起作用。使用分裂和否定匹配比使用exec更有效嗎? – 2010-08-10 22:32:47