10

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

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

4 回答 4

5

.匹配任何字符。你需要逃避它\.

尝试这个:

/-?\d+\.?\d*$/

那是:

-?           // optional minus sign
\d+          // one or more digits
\.?          // optional .
\d*          // zero or more digits

正如您在MDN 的正则表达式页面中看到的那样,+?是 1 或更多的非贪婪匹配,而不是 1 或更多的可选匹配。

于 2013-06-13T21:48:05.877 回答
0

这应该做的工作/-?\d+\.?\d*$/

result = subject.match(/-?\d+\.?\d*$/mg);

在此处输入图像描述 在此处输入图像描述

于 2013-06-13T21:53:40.407 回答
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 上

于 2013-06-13T22:03:00.757 回答
0

几个问题:

  • 旁注:破折号不需要转义;它仅在字符类(例如[a-z])中是特殊的。
  • 特别;它的意思是“匹配任何字符”。你会想逃避它:\.
  • \d+?实际上意味着:匹配至少一个数字,但如果正则表达式在模式的那部分之后继续,请尝试尽早匹配剩余的正则表达式(“惰性”或“非贪婪匹配”)。在你的情况下,这?什么都不做。要使这些数字真正可选,请使用\d*.
  • 最后,您可能希望将小数点和后续数字作为一组可选:(\.\d+)?

执行摘要:/-?\d+(\.\d+)?$/

于 2013-06-13T21:49:24.293 回答