这涉及从包含连字符的字符串中提取带符号的数字的一般问题。
有人可以为以下内容提出正则表达式:
"item205" => 205
"item-25 => -25
"item-name-25" => -25
基本上,我们想要将数字提取到字符串的末尾,包括符号,而忽略其他地方的连字符。
以下内容适用于前两个,但最后一个返回“-name-25”:
var sampleString = "item-name-25";
sampleString.replace(/^(\d*)[^\-^0-9]*/, "")
谢谢!
答案 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];
关于你的正则表达式的一件事:在一个字符类中,你只能有意义地使用^
一次(在开头)将它标记为否定的字符类。它不能单独用于每个元素。这意味着您的角色类实际上对应于“不是-
,^
或数字的任何角色。