2

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

有人可以想出以下的正则表达式:

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

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

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

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

谢谢!

4

2 回答 2

6

您可以.match改用:

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

正则表达式表示“可能的连字符,然后是一个或多个数字,然后是字符串的结尾”。

于 2012-12-07T17:38:46.953 回答
4

不要使用replace. 相反,使用match并编写您真正想要的正则表达式(因为这更容易):

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

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

于 2012-12-07T17:39:13.883 回答