2012-10-19 74 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);