Я бы, вероятно, согласился со следующим:
/^\d+(\.[\d]+){0,1}[€$]{0,1}$/gm
Это соответствует хотя бы одной цифре, затем позволяет вам поставить ноль или один период где-то там, а затем нужно хотя бы одну цифру после периода.В конце этого вы можете поставить один из символов валюты с явным именем.Вы должны добавить все те, которые хотите поддерживать.
Давайте попробуем это для следующего списка:
3.50€
2$
.5
34.4.5
2$€
afasf
Вы увидите, что только первые два сопоставлены правильно.Ваш окончательный результат - те, что в группе 0.
const regex = /^\d+(\.[\d]+){0,1}[€$]{0,1}$/gm;
const str = `3.50€
2\$
.5
34.4.5
2\$€
afasf
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}