RegEx匹配字符串末尾的数字

时间:2013-06-13 21:42:17

标签: javascript regex

我正在尝试使用正则表达式匹配字符串末尾的数字。例如,字符串可能如下所示:

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位或更多位数
  • $:匹配字符串
  • 的末尾

我错过了什么?

4 个答案:

答案 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);

enter image description here enter image description here

答案 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.

jsfiddle