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+)?$/
Если шаблон всегда 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