2012-10-19 104 views
0

我有一個字符串,我試圖抓住裏面的整數。該字符串的樣子:從圓括號內取整數

"(2) This is a string"

我需要虎視眈眈那2。但它可以是任何數字,所以我嘗試過:

var str = "(2) this is a string"; 
var patt = /\(\d\)/; 

var num = str.match(patt); 

這不會返回正確的答案。我應該在()上進行拆分還是有更好的正則表達式?

+0

是數量總是要單括號裏面?或者可能會有雙括號或數字在某個地方? –

回答

2
var str = "(2) this is a string"; 
var patt = /\((\d)\)/; 

var num = str.match(patt)[1]; 

2件事。當你想從一個匹配的字符串中捕獲一個段時,你使用()來說明這一點。所以我只是將\d包裹在parens中來捕捉它。

其次,爲了訪問捕獲的段,您必須鑽取返回的數組。 match方法將返回一個數組,其中第一個項目是整個匹配的字符串,第二個項目是任何匹配的捕獲組。因此,使用[1]來獲取第一個捕獲組(第二個項目)

+0

將使用多個數字嗎?它可能是1它可能是100. – Psyllex

+0

'(\ d)'匹配並捕獲一個數字。但是(\ d +)'會匹配一個或多個數字。 '+'表示一個或多個前一個標記。 –

+0

甜蜜的謝謝你! – Psyllex

0
var str = "(2) this is a string"; 
var patt = /\((\d+)\)/; 
alert(str.match(patt)[1]); 

This works!

它爲什麼有效。由於在(())混亂中還有一個捕獲,它填充了匹配數組中的[1]元素。

+1

不......只有當你在表達式中有一個字符串。 –

+0

@克勞德裏安爲什麼會這樣工作?因爲它不。 –

+0

@FelixKling確實如此。 – CodeAngry

0

使用此。不事關多少括號

var str = "(2) this is a string"; 
var patt = /\(\d\)/; 

var num = str.match(patt)[0].replace("(", "").replace(")","") 

這應該工作

0
var str = "(2) this is a string"; 
var a = /\([\d]*\)/g.exec(str)[0]; 
var num = a.substring(1, a.length-1);