如何使用正则表达式检索字符串中的两个数字

how retrieve two numbers in string using regex

本文关键字:两个 数字 正则表达式 何使用 检索 字符串      更新时间:2023-09-26

我试图从以下字符串中检索两个整数(而不是浮点数):

 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();

请帮忙。任何帮助都将不胜感激。谢谢

编辑

不能使用拆分方法
cos有时该行在每行前面或末尾有额外空间

类似:

var line="0 2";

这就是我需要regex的原因。

编辑2

事实证明,我不需要正则表达式!

谢谢你的帮助!

只需将空格上的行拆分,并将字符parseInt转换为数字:)

var line = "-21 42";
var ints = line.split(' ').map(function (num) {
    return parseInt(num, 10);
});
var firstInt = ints[0]; // -21
var secondInt = ints[1]; // 42

编辑:

如果你担心尾随空格等,只需先trim字符串:

var ints = line.trim().split(' ').map(...

此解决方案仅适用于正整数

// 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,这并不能真正解决您的问题。修剪可能会删除字符串开头的多余空格,但不会删除数字之间的多余空格。无论使用了多少空间,我的上述解决方案都能工作,但如果您对其进行评估,您会发现它可能会通过使用regexp 拆分而不是匹配)而得到改进

// same effect as above, but breaks the string into less parts
let [a,b] = input.split(/'s+/).map(parseInteger).filter(isNumber);

这样做的结果是mapfilter操作不必测试那么多的''(空字符串)和NaN(不是数字)值。然而,使用regexp引擎的性能成本可能不会超过用于逐个处理空字符串的几个额外周期。

您可以使用split方法将字符串分解为数组:

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);

您甚至不需要regex,它可以非常简单地完成:

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