Это выражение будет немного сложным. Давайте, возможно, попробуем другой подход и, возможно, сосредоточимся на двухбуквенном состоянии и проведем назад к слову, перед которым, используя выражение, похожее на:
^.+?(\w+)[,\s]+?[A-Z]{2}.+$
Мы видим, что мы столкнемся с проблемой, если в Городе будет более одного слова. Однако, если бы у нас был список фиксированных слов, таких как Ave
, BLVD
, ST
прямо перед городом, мы, скорее всего, могли бы придумать лучшее выражение, например:
^.+Ave\s+(.+?)[,\s]+?[A-Z]{2}.+$
который мы бы расширили до:
^.+(Ave|Street|ST|BLVD)\s+(.+?)[,\s]+?[A-Z]{2}.+$

RegEx Circuit
jex.im визуализирует регулярные выражения:

Test
const regex = /^.+Ave\s+(.+?)[,\s]+?[A-Z]{2}.+$/gm;
const str = `59 W Grand Ave Chicago, IL 60654
59 E Grand Hotel Ave Chicago IL 60654
59 E George Washington Ave New York, NY 60654
59 E George Washington Ave San Diego CA 60654
59 E George Washington Ave St. Petersburg, CA 60654`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);