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

时间:2016-01-07 01:22:24

标签: 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();

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

修改

无法使用拆分方法。有时候这条线在每一行的前面或结束处有额外空间

像:

  

var line =" 0 2&#34 ;;

这就是我需要正则表达式的原因。

编辑2

原来,我不需要正则表达式!

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

只需将空格分开,将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(...

答案 1 :(得分:2)

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

// 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使用// same effect as above, but breaks the string into less parts let [a,b] = input.split(/\s+/).map(parseInteger).filter(isNumber); 这并不能解决您的问题。修剪可以删除字符串开头的无关空格,但它不会删除数字之间的额外空格。无论使用多少空格,我的上述解决方案都有效,但如果您对其进行评估,您会发现可以通过拆分匹配)来改进它正则表达式

map

结果是filter''操作不必测试NaN(空字符串)和library(shiny) fileNames = c('a', 'b', 'c', 'd', 'e') ui <- fluidPage( selectInput("request","Select Existing Request", choice = c('Choose a File Name' = '', unique(fileNames)), multiple = FALSE, selected = NULL) ) server <- function(input, output) { } shinyApp(ui = ui, server = server) (不是{}}一些数字)。但是,使用正则表达式引擎的性能成本可能不会超过用于逐个处理空字符串的几个额外周期。

答案 2 :(得分:1)

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

$(function() {
    $('#SortableList').sortable({
        items: '> li.canMove',
        axis: 'y'
    });
});

<ol id="SortableList">
    <li class="canMove">ONE (Can move from position 1)</li>
    <li class="neverMove">TWO (Should never leave position 2)</li>
    <li class="canMove">THREE (Can move from position 3)</li>
    <li class="neverMove">FOUR (Should never leave position 4)</li>
    <li class="canMove">FIVE (Can move from position 5)</li>
    <li class="canMove">SIX (Can move from position 6)</li>
</ol>

如果您更喜欢使用正则表达式:

var line = "0 1";
var pieces = line.trim().split(" ");
console.log(pieces);

答案 3 :(得分:0)

你甚至不需要正则表达式,它可以非常简单地完成:

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