Вы можете сопоставить эти строки, используя
/.*?\b[A-Z]{2}\b/g
См. Демоверсию regex .
ПРИМЕЧАНИЕ : Если вы хотите точно соответствовать штатам США, вы можете заменить [A-Z]{2}
на (?:AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)
:
/.*?\b(?:AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)\b/g
Детали шаблона
.*?
- любые 0+ символов, кроме символов перевода строки, как можно меньше
\b[A-Z]{2}\b
- целое слово, состоящее из двух заглавных букв.
Затем добавьте запятую перед последними 1+ пробелами + 1+ непробелами с .replace(/\s+\S+$/, ',$&')
.
JS демо:
var regex = /.*?\b[A-Z]{2}\b/g;
var str = "LOS ANGELES CA MIAMI FL";
var res = str.match(regex);
console.log(res[0].trim().replace(/\s+\S+$/, ',$&'));
console.log(res[1].trim().replace(/\s+\S+$/, ',$&'));