2012-11-13 171 views
0

我有一个文档,我想从大列表中提取特定数字。使用子字符串提取数字

我不能在这里列出整个代码,为了简单起见,我将展示一个示例,因为代码不是必需的。

例如,说我有下面出现一个列表:

1: text, 
2: more text, 
3: etc 

这将是易于使用的子捕获只有字符串,这将是我以后的数的第一个字母。然而,当它达到10或100时会发生什么?请记住,我无法改变列表的格式或内容,我只能接收其中的值。

有没有一种方法来得到只有数字,没有字符串?

回答

2

使用正则表达式。

var matches = "121: test".match(/^(\d*):\s/) 
var val; 

if (matches && matches.length > 0) val = matches[1] 

此正则表达式有一堆的东西,你可能会或可能不会需要

^意味着行的开头
()手段捕捉到这组
\d*意味着尽可能多你在连续发现的数字
:是你在你的例子中的冒号
\s是冒号后的单空格字符,在你的榜样

因为我们定义(\ d *),匹配方法将捕获匹配的那部分(数字),并使其在阵列中提供。

+0

这美丽的工作,感谢你在最后加上[1]的额外努力,它确保我只能找到第一个数字,这样我就不会再有其他数字出现了。我认为它应该是一个0虽然,除非我的意图错误,无论如何,我有一些工作从它 –

+0

不,第一项int数组(索引0)是整个比赛,这是更只是数字(它有':'和空格) – hvgotcodes

+0

啊,我现在看到,我只用/ \ d +/ig。感谢您的帮助,正则表达式是我想要了解的更多内容,并且您已经很好地解释了它。 –

1

为什么不使用正则表达式呢?

'100: asds'.replace(/^(\d+):.+$/, '$1'); // 100 
1

你可以得到的位置 ':' 再这样string.substring(0,位置)

var str="1000: this is a string"; 
var number = str.substring(0,str.search(':')); // 1000 
2

你做CA,直到子的indexOf( “:”); 示例代码:

var str="100: Hello world!"; 
document.write(str.substring(0, str.indexOf(":"))); 

你得到100结果。 希望这有助于!运气好的话,

+0

这是一个很好的解决方案,但不幸的是,第一个条目在开头就有{{无论如何感谢您的答案。 –

1

尝试

// limit split to 1 to avoid unnecessary splits 
var num = "1000: rest of string".split(":", 1)[0]; 

我跑这里给出的jsPerf方法的一些测试结果here

检索所需数量的最快方法是

"1000: rest of string".substring(0, str.indexOf(":")); 

如果速度很重要,那么正确的答案应该发送给用户编码器。

2

您可以使用Reguler表达式:

var s = "1: text,\n"+ 
"2: more text,\n"+ 
"3: etc\n​​"​; 

var matches = s.match(/\d+/ig); 

for(var i=0;i<matches.length;++i){ 
    console.log(matches[i]);   
}​​​​​​​​​​ 

看到it working here

0

可能正则表达式将是一个更好的选择适合你,但如果你所需要使用上建议的解决方案,U可以执行以下操作以摆脱“{”

if(str.contains("{")) 
{ 
    str.replace("{", ""); 
} 
相关问题