Javascript 如何使用正则表达式检索字符串中的两个数字
我试图从以下字符串中检索两个整数(不是浮点数):Javascript 如何使用正则表达式检索字符串中的两个数字,javascript,regex,Javascript,Regex,我试图从以下字符串中检索两个整数(不是浮点数): 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 12 11 10 22 33 2 102 149 我想进入javasScript,比如: var line = "0 1"; var firstInt = line.someMagic(); var secondInt = line.someMagic(); 请帮忙。 任何帮助都将不胜感激。 谢谢 编辑 无法使用拆分方法因为有时该行的
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
12 11
10 22
33 2
102 149
我想进入javasScript,比如:
var line = "0 1";
var firstInt = line.someMagic();
var secondInt = line.someMagic();
请帮忙。
任何帮助都将不胜感激。
谢谢
编辑
无法使用拆分方法因为有时该行的前面或末尾都有额外的空间 比如: var line=“0 2” 这就是为什么我需要正则表达式 编辑2 事实证明,我不需要正则表达式
谢谢你的帮助 您可以使用拆分方法将字符串拆分为数组:
var line = "0 1";
var pieces = line.trim().split(" ");
console.log(pieces);
如果您喜欢使用正则表达式:
var line = "0 1";
var pieces = /(\d+)\s(\d+)/g.exec(line);
console.log(pieces);
可以使用拆分方法将字符串拆分为数组:
var line = "0 1";
var pieces = line.trim().split(" ");
console.log(pieces);
如果您喜欢使用正则表达式:
var line = "0 1";
var pieces = /(\d+)\s(\d+)/g.exec(line);
console.log(pieces);
您甚至不需要正则表达式,它可以非常简单地完成:
var line = "0 1";
// Split line into an array using the space as a delimiter
var parsedLine = line.split(" ");
var firstInt = parsedLine[0]; // => 0
var secondInt = parsedLine[1]; // => 1
您甚至不需要正则表达式,它可以非常简单地完成:
var line = "0 1";
// Split line into an array using the space as a delimiter
var parsedLine = line.split(" ");
var firstInt = parsedLine[0]; // => 0
var secondInt = parsedLine[1]; // => 1
此解决方案仅适用于正整数
// ES5
var input = "0 1";
var matches = input.match(/\d+/g);
var a = matches[0];
var b = matches[1];
console.log(a); // 0
console.lob(b); // 1
使用ES6会更好一点
// ES6
let input = "0 1";
let [a,b] = input.match(/\d+/g);
console.log(a); // 0
console.lob(b); // 1
也就是说,RegExp不是解决这个问题的唯一方法。您可能有前导或尾随空格,但这不是问题。这里有一个函数式方法,可以帮助您快速解决这个问题
const isNumber = x => ! Number.isNaN(x);
const parseInteger = x => window.parseInt(x, 10);
let input = ' 20 -54 ';
let [a,b] = input.split(' ').map(parseInteger).filter(isNumber);
console.log(a); // 20
console.lob(b); // -54
还请注意,有些人建议使用.trim
,但这并不能真正解决您的问题。Trim可能会删除字符串开头和结尾的多余空格,但不会删除数字之间的多余空格。不管使用了多少空格,我上面的解决方案都会起作用,但是如果您对它进行评估,您会发现,通过使用regexp拆分(非匹配),它可能会得到改进
// same effect as above, but breaks the string into less parts
let [a,b] = input.split(/\s+/).map(parseInteger).filter(isNumber);
这样做的结果是
映射
和筛选
操作不必测试那么多的'
(空字符串)和NaN
(不是数字)值。但是,使用regexp引擎的性能成本可能不会超过用于逐个处理空字符串的几个额外周期。此解决方案仅适用于正整数
// ES5
var input = "0 1";
var matches = input.match(/\d+/g);
var a = matches[0];
var b = matches[1];
console.log(a); // 0
console.lob(b); // 1
使用ES6会更好一点
// ES6
let input = "0 1";
let [a,b] = input.match(/\d+/g);
console.log(a); // 0
console.lob(b); // 1
也就是说,RegExp不是解决这个问题的唯一方法。您可能有前导或尾随空格,但这不是问题。这里有一个函数式方法,可以帮助您快速解决这个问题
const isNumber = x => ! Number.isNaN(x);
const parseInteger = x => window.parseInt(x, 10);
let input = ' 20 -54 ';
let [a,b] = input.split(' ').map(parseInteger).filter(isNumber);
console.log(a); // 20
console.lob(b); // -54
还请注意,有些人建议使用.trim
,但这并不能真正解决您的问题。Trim可能会删除字符串开头和结尾的多余空格,但不会删除数字之间的多余空格。不管使用了多少空格,我上面的解决方案都会起作用,但是如果您对它进行评估,您会发现,通过使用regexp拆分(非匹配),它可能会得到改进
// same effect as above, but breaks the string into less parts
let [a,b] = input.split(/\s+/).map(parseInteger).filter(isNumber);
这样做的结果是
映射
和筛选
操作不必测试那么多的'
(空字符串)和NaN
(不是数字)值。但是,使用regexp引擎的性能成本可能不会超过用于逐个处理空字符串的几个额外周期。只需在空格上拆分行,然后parseInt
将字符分成数字:)
编辑:
如果您担心尾随空格等,只需先修剪字符串即可:
var ints = line.trim().split(' ').map(...
只需在空格中拆分行,然后
parseInt
将字符分成数字:)
编辑:
如果您担心尾随空格等,只需先修剪字符串即可:
var ints = line.trim().split(' ').map(...
您仍然可以使用“拆分”,但请先修剪每条线。@Sebas我确实需要一个平滑而优雅的解决方案。。。这就是为什么我认为在正则表达式中。。。trim并不酷如果你真的想变得优雅,你甚至可以完全跳过这个解析步骤,把字符串提供给最终的方法。我可能错了,因为我看不到你的代码,但是…@AlvaroJoao:Regex是平滑和优雅的反面。这是一把瑞士军刀,太大了,甚至放不进你的口袋。当字符串方法可以轻松地完成工作时,使用它们会更加优雅、自我记录,并且更易于维护。@ShadowRanger我今天学习了smth!谢谢很好的提示,谢谢你的回答!您仍然可以使用“拆分”,但请先修剪每条线。@Sebas我确实需要一个平滑而优雅的解决方案。。。这就是为什么我认为在正则表达式中。。。trim并不酷如果你真的想变得优雅,你甚至可以完全跳过这个解析步骤,把字符串提供给最终的方法。我可能错了,因为我看不到你的代码,但是…@AlvaroJoao:Regex是平滑和优雅的反面。这是一把瑞士军刀,太大了,甚至放不进你的口袋。当字符串方法可以轻松地完成工作时,使用它们会更加优雅、自我记录,并且更易于维护。@ShadowRanger我今天学习了smth!谢谢很好的提示,谢谢你的回答!编辑我的问题。。。你能在你的解决方案中使用正则表达式吗。。。(顺便说一句,谢谢你!)@AlvaroJoao使用regexp在某种程度上并不能使解决方案变得更好。这可能是迄今为止这里提供的最健壮的解决方案。@AlvaroJoao:只需在
行
和行之间添加.trim()
.split(“”)
,即可行.trim().split(“”).map(…
而且效果很好。@ShadowRanger哈哈哈,我发誓我没有在我的编辑lol中复制你的评论,我只是选择了完全相同的位置作为省略号-多巧啊:)@naomik:是的,忘了JS的拆分
在像Perl的那样运行空白时传递一个空格拆分时没有特殊的行为(就像Python在传递None
时所做的那样)。简单的解决方法就是将拆分模式从'
更改为/\s+/
。使用正则表达式,但如此简单不应降低可读性。只需编辑我的问题…你能在解决方案中使用正则表达式吗…谢谢这个btw!)@AlvaroJoao使用regexp在某种程度上并不能使解决方案变得更好