Нужно определить точные условия, которым должна удовлетворять входящая строка, это установит допустимое множество адресов. Как вы и сказали, может быть без дома, и подозреваю может быть без города или плюс страна и т.д.
Либо придётся попотеть, постоянно совершенствуя свою регулярку и скрипты по мере поступления входящих данных. Например, пришёл адрес, где две запятые подряд (это опечатка) - ага, нужно учесть это в регулярке. Или, например, запятая пропущена, но всё же можно догадаться по какому-то критерию, что она там должна быть - ага, и это нужно учесть. И так далее.
В целом, я бы сначала делил весь адрес на базовые компоненты (город, улица, дом), а потом уже отделил бы номер дома, склеив всё остальное. То есть самое простое, что приходит в голову, примерно такое:
let arr = str.split(",")
if (arr.length > 2) ....... // склеиваем все элементы, кроме последнего
Но для надёжности конечно лучше перепроверять, что улица имеет формат улицы, что номер дома содержит цифры и т.д.