2014-08-29 121 views
0

我想提取这个字符串的数字:“ax(341); ay(20); az(3131);”解析字符串查找字符

我认为我可以做到这一点如何:

var ax = data.split('('); 
var ax2 = ax[1].split(')'); 

AX2 [0]有“341”

现在,如果我可以重复这一点,但在接下来的indexOf开始服用第二个数字。

我认为这是一个不好的做法,所以我问你如果你有一个更好的主意。

在此先感谢

+0

使用正则表达式在这里看到http://stackoverflow.com/questions/13807207/regex-find-a-number-between-parentheses – Mritunjay 2014-08-29 10:23:49

回答

4

使用正则表达式:

var str = "ax(-341);ay(20);az(3131);" 
var regex = /(-?\d+)/g 
var match = str.match(regex); 
console.log(match); // ["-341", "20", "3131"] 

现在,你可以访问阵列作为正常的数字。

DEMO

+0

数字可以是负数,这种模式如何? – oscarvady 2014-08-29 10:38:04

+0

@oscarvady,看我的编辑。 – Andy 2014-08-29 10:40:27

1

您可以使用正则表达式从此提取所有数字。

var data = "ax(341);ay(20);az(3131);"; 
var ax = data.match(/\d+/g); 

这里ax现在["341", "20", "3131"]

注意ax包含数字的字符串。将它们转换为数字,使用以下

ax2 = ax.map(function(x){ return parseInt(x); }) 

编辑:您也可以使用Number的功能在上面的行映射。它会看起来像,

ax2 = ax.map(Number) 

ax2后包含原始字符串的所有整数。

+1

你可以只说'AX2 = ax.map(parseInt函数)' – Mritunjay 2014-08-29 10:26:18

+0

不可以。它给出了一些奇怪的结果。试用。对我来说,它给了[341,NaN,NaN]。看到[这](http://stackoverflow.com/questions/262427/javascript-arraymap-and-parseint) – nisargjhaveri 2014-08-29 10:27:25

+0

这将给出一个错误,因为'parseInt'使用第二个参数作为基数。最好使用'Number':'ax2 = ax.map(Number)' – Andy 2014-08-29 10:27:26

0

你可以使用正则表达式,如:

var string = 'ax(341);ay(20);az(3131);'; 
var pattern = /([0-9]{1,})/g; 

var result = string.match(pattern); 
console.log(result); 
// ["341", "20", "3131"] 

http://regex101.com/r/zE9pS7/1