Your current pattern has a lot of optional parts. It would also allow for example a single comma.
If the max is only 1 comma and 1 dot per number before or after the comma, you could make it optional:
^(?:\d+(?:\.\d+)?|\.\d+)(?:,(?:\d+(?:\.\d+)?|\.\d+))*$
^
Start of string
\d+
Match 1+ digits
(?:\.\d+)*
Match 0+ times a dot and 1+ digits
(?:
Non capturing group
,\d+(?:\.\d+)
match comma, 1+ digits and optionally a dot and 1+ digits
)?
Close group and make it optional
$
End of string
Regex demo
Your code could look like (Note to double escape the backslashes)
this.regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');
let regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');
[
"9.8,8.6",
"9.8",
"8.2,9",
"5,9",
"9.8,8.6,1.1",
"1,8.6",
"9.8,8.6,1.1",
"8,8,8",
"9.8,8,8",
"1,1",
"1,1,.1,1",
].forEach(s => {
console.log(s + " ==> " + regex.test(s));
});