Вы соответствуете нежелательным значениям, потому что .
может соответствовать любому символу, и, таким образом, он соответствует любым символам от самого левого {{
до первого }}
справа от {{
.
Вы можетеиспользуйте
/\${{(\d[\d.]*)}}/g
Или, если важен формат числа, разделенного точками
/\${{(\d+(?:\.\d+)*)}}/g
См. это regex demo и это regex demo .
Обратите внимание, что если строки предварительно проверены, и вы уверены, что внутри ${{
и }}
нет {
и }
, вы можете даже использовать [^{}]*
вместо \d[\d.]*
:
/\${{([^{}]*)}}/g
Итак, вы либо захватываете
\d[\d.]*
- цифру, а затем 0 или более цифр и точекили же \d+(?:\.\d+)*
- 1+ цифр и затем 0+ повторений .
и 1+ цифр.
JS demo:
const s = '${{1.33.98}${{2.44.1}} ${{1.24.52.44.1}}';
let m = [...s.matchAll(/\${{(\d[\d.]*)}}/g)];
console.log(Array.from(m, x => x[1]));
Для устаревших версий ES:
var s = '${{1.33.98}${{2.44.1}} ${{1.24.52.44.1}}';
var rx = /\${{(\d[\d.]*)}}/g, results = [], m;
while (m=rx.exec(s)) {
results.push(m[1]);
}
console.log(results);