0

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

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

例如,假设我有一个如下所示的列表:

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

使用 substring 仅捕获字符串中的第一个字母很容易,这将是我所追求的数字。但是,当它达到 10 或 100 时会发生什么?请记住,我根本无法更改列表的格式或内容,我只能接收其中的值。

有没有办法只得到数字,没有字符串?

4

7 回答 7

3

使用正则表达式。

就像是

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

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

这个正则表达式有一堆你可能需要也可能不需要的东西

^ 表示该行的开头
() 表示捕获该组
\d* 表示您在一行
:中找到的数字数量是您在示例
\s中的冒号是冒号后的单个空白字符,在您的示例中

由于我们定义了 (\d*),match 方法将捕获匹配的那部分(数字)并使其在数组中可用。

于 2012-11-13T13:33:22.510 回答
2

你可以做子串直到 indexof(":"); 示例代码:

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

结果你得到100。希望这可以帮助!祝你好运,

于 2012-11-13T13:35:18.383 回答
2

您可以使用正则表达式:

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]);           
}​​​​​​​​​​

看到它在这里工作

于 2012-11-13T13:44:52.713 回答
1

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

'100: asds'.replace(/^(\d+):.+$/, '$1'); // 100
于 2012-11-13T13:33:28.737 回答
1

你可以得到':'的位置,然后做 string.substring(0, position)

var str="1000: this is a string";
var number = str.substring(0,str.search(':')); // 1000
于 2012-11-13T13:34:04.143 回答
1

尝试

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

我在 jsPerf 上对这里给出的方法进行了一些测试,结果在这里

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

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

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

于 2012-11-13T13:39:29.413 回答
0

也许正则表达式对您来说是一个更好的选择,但是如果您需要使用上面建议的解决方案,您可以执行以下操作来摆脱“{”

if(str.contains("{"))
{
     str.replace("{", "");
}
于 2012-11-14T06:45:36.423 回答