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 ответов


. соответствует любому символу. Вы должны избежать его, как \.

попробуйте это:

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

что есть:

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

как вы можете видеть на страница регулярных выражений MDN, +? является не жадным совпадением 1 или более, а не необязательным совпадением 1 или более.


несколько вопросов:

  • Примечание: тире не нужно экранировать; это только специальные классы символов (например,[a-z]).
  • точка is специальные; это означает "любой символ". Вы захотите избежать этого:\.
  • \d+? на самом деле означает: сопоставьте хотя бы одну цифру, но если регулярное выражение продолжается после этой части шаблона, попробуйте сопоставить оставшееся регулярное выражение как можно раньше ("лень" или "нежадное соответствие"). В вашем случае это ? просто ничего не делает. Чтобы сделать эти цифры действительно необязательными, используйте \d*.
  • наконец, вы можете сделать десятичную точку и последующие цифры необязательными в качестве группы:(\.\d+)?

резюме: /-?\d+(\.\d+)?$/


Это должно сделать задание /-?\d+\.?\d*$/

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

enter image description hereenter image description here


Если шаблон всегда 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.

On jsfiddle