如何使用Star在Javascript中匹配多位正则表达式

时间:2014-01-26 01:17:58

标签: javascript regex

我正在尝试从javascript中的字符串中提取一个多位数字,前面是非数字,但有麻烦。例如,我想从“B32就是地板”中得到“32”。

var str = "B23 is the floor."
var num = str.match(/\d*/);
$("#result").append(Object.prototype.toString.call(num) + ', ');
$("#result").append(Object.prototype.toString.call(num[0]) + ', ');
$("#result").append(num[0] + ', ');
$("#result").append(num[0].length);

返回:

Result:[object Array], [object String], , 0

num [0]似乎是一个空字符串。

由于某种原因,regext / \ d * /不能按照预期的方式工作。我试过/(\ d) /,/(\ d)* /,/ [0-9] /,以及其他一些合理和不合理的东西,但它似乎不起作用

如果你想看一下,这是我的jsFiddle: http://jsfiddle.net/PLYHF/3/

3 个答案:

答案 0 :(得分:1)

问题是正则表达式解析器是“懒惰的”。它看到你的正则表达式完全没有“没有”(因为*意味着0或更多),所以任何东西都会通过。

相反,请尝试/\d+/。这将迫使至少有一位数。

答案 1 :(得分:0)

您要做的是匹配/ ^ 0-9 /,然后从返回的数组中获取第二个值(Array[1])。这将包含第一组捕获的内容。最终看起来像这样:

var str = "B23 is the floor."
var num = str.match(/[^0-9\s]([0-9]+)/);
$('#result').append(num[1]);

demo

答案 2 :(得分:0)

parseInt(/[A-Z]+([0-9]+)/.exec('B23 is the floor.')[1]); // 23