Ваше регулярное выражение не соответствует тому, что вам нужно, потому что
(?<= )
соответствует местоположению сразу после пробела, а затем ([^,]+)
захватывает в группу 1 любого одного или более символы, отличные от запятой.
В строке типа SomeCodeHere Los Angeles City, California, USA
совпадение происходит сразу после первого пробела и идет до первой запятой, то есть Los Angeles City
.
Похоже, вы можете использовать не-регулярные решения, например user984003 предлагает , но в случае, если ваши SomeCodeHere
, SomeAddressHere
или SecondAddressHere
тоже могут содержать запятые, Вы можете рассмотреть возможность получения значения между двумя последними запятыми:
/[^\s,][^,]*(?=,[^,]*$)/
См. демо regex .
Подробности
[^\s,]
- символ, отличный от пробела и запятой [^,]*
- 0+ символов, кроме запятой (?=,[^,]*$)
- положительный прогноз, требующий запятую и затем 0+ символов, кроме запятой ([^,]*
) до конца строки ($
).
JS демо:
var str2 = "SomeCodeHere Los Angeles City, California, USA";
var match = str2.match(/[^\s,][^,]*(?=,[^,]*$)/);
if (match) console.log(match[0]);