从字符串中提取嵌入数字 - JavaScript Regex

时间:2012-12-07 17:32:55

标签: javascript regex

这涉及从包含连字符的字符串中提取带符号的数字的一般问题。

有人可以为以下内容提出正则表达式:

 "item205"             => 205  
 "item-25              => -25  
 "item-name-25"        => -25  

基本上,我们想要将数字提取到字符串的末尾,包括符号,而忽略其他地方的连字符。

以下内容适用于前两个,但最后一个返回“-name-25”:

var sampleString = "item-name-25";
sampleString.replace(/^(\d*)[^\-^0-9]*/, "")

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以改为使用.match

"item-12-34".match(/-?\d+$/);  // ["-34"]

regexp说“可能的连字符,然后是一个或多个数字,然后是字符串的结尾”。

答案 1 :(得分:4)

请勿使用replace。相反,使用match并根据您的实际需要编写正则表达式(因为这样更容易):

var regex = /-?\d+$/;
var match = "item-name-25".match(regex);
> ["-25"]
var number = match[0];

关于你的正则表达式的一件事:在一个字符类中,你只能有意义地使用^一次(在开头)将它标记为否定的字符类。它不能单独用于每个元素。这意味着您的角色类实际上对应于“不是-^或数字的任何角色。