我正在尝试使用正则表达式匹配字符串末尾的数字。例如,字符串可能如下所示:
var foo = '101*99+123.12'; // would match 123.12
var bar = '101*99+-123'; // would match -123
var str = '101*99+-123.'; // would match -123.
这是我到目前为止所得到的,但如果没有小数点,它似乎匹配整个字符串:
foo.match(/\-?\d+.?\d+?$/);
我认为这意味着:
\-?
:可选“ - ”符号\d+
:1个或多个数字.?
:可选的小数点\d+?
:小数点后可选的1位或更多位数$
:匹配字符串我错过了什么?
答案 0 :(得分:5)
.
匹配任何字符。您需要将其转义为\.
试试这个:
/-?\d+\.?\d*$/
那是:
-? // optional minus sign
\d+ // one or more digits
\.? // optional .
\d* // zero or more digits
正如您在MDN's regex page所看到的那样,+?
是1或更多的非贪婪匹配,而不是1或更多的可选匹配。
答案 1 :(得分:0)
几个问题:
[a-z]
)。\.
\d+?
实际上意味着:匹配至少一个数字,但如果正则表达式在该部分模式之后继续,请尝试尽早匹配剩余的正则表达式(“lazy”或“非贪婪的匹配“)。在你的情况下,这个?
什么都不做。要使这些数字真正可选,请使用\d*
。(\.\d+)?
执行摘要:/-?\d+(\.\d+)?$/
答案 2 :(得分:0)
这应该完成工作/-?\d+\.?\d*$/
result = subject.match(/-?\d+\.?\d*$/mg);
答案 3 :(得分:0)
如果模式总是x*y+z
,那么你可以在没有像这样的正则表达式的情况下执行此操作。
var foo = '101*99+123.12'; // would match 123.12
var bar = '101*99+-123'; // would match -123
var str = '101*99+-123.'; // would match -123.
function getLastNumber(string) {
return string.split("+")[1];
}
console.log(getLastNumber(foo));
console.log(getLastNumber(bar));
console.log(getLastNumber(str));
输出
123.12
-123
-123.
上