我有一个文档,我想从一个大列表中提取特定数字。
我不能在这里列出整个代码,为了简单起见,我将展示一个示例,因为代码不是必需的。
例如,假设我有一个如下所示的列表:
1: text,
2: more text,
3: etc
使用 substring 仅捕获字符串中的第一个字母很容易,这将是我所追求的数字。但是,当它达到 10 或 100 时会发生什么?请记住,我根本无法更改列表的格式或内容,我只能接收其中的值。
有没有办法只得到数字,没有字符串?
我有一个文档,我想从一个大列表中提取特定数字。
我不能在这里列出整个代码,为了简单起见,我将展示一个示例,因为代码不是必需的。
例如,假设我有一个如下所示的列表:
1: text,
2: more text,
3: etc
使用 substring 仅捕获字符串中的第一个字母很容易,这将是我所追求的数字。但是,当它达到 10 或 100 时会发生什么?请记住,我根本无法更改列表的格式或内容,我只能接收其中的值。
有没有办法只得到数字,没有字符串?
使用正则表达式。
就像是
var matches = "121: test".match(/^(\d*):\s/)
var val;
if (matches && matches.length > 0) val = matches[1]
这个正则表达式有一堆你可能需要也可能不需要的东西
^
表示该行的开头
()
表示捕获该组
\d*
表示您在一行
:
中找到的数字数量是您在示例
\s
中的冒号是冒号后的单个空白字符,在您的示例中
由于我们定义了 (\d*),match 方法将捕获匹配的那部分(数字)并使其在数组中可用。
你可以做子串直到 indexof(":"); 示例代码:
var str="100: Hello world!";
document.write(str.substring(0, str.indexOf(":")));
结果你得到100。希望这可以帮助!祝你好运,
您可以使用正则表达式:
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]);
}
看到它在这里工作。
你为什么不为此使用正则表达式?
'100: asds'.replace(/^(\d+):.+$/, '$1'); // 100
你可以得到':'的位置,然后做 string.substring(0, position)
var str="1000: this is a string";
var number = str.substring(0,str.search(':')); // 1000
尝试
// 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(":"));
如果速度很重要,那么正确的答案应该交给用户编码器。
也许正则表达式对您来说是一个更好的选择,但是如果您需要使用上面建议的解决方案,您可以执行以下操作来摆脱“{”
if(str.contains("{"))
{
str.replace("{", "");
}