Ретроспективная проверка в javascript (?<=)
Как известно в javascript отсутствует ретроспективная проверка - это когда мы проверяем регулярное выражение не с начала, а с конца.
Её можно эмулировать:
var str = 'abc!';
str.
split("").reverse().join("").
match(/(?!([.,!?]+)).*/)[0].
split("").reverse().join(""); // [ "abc" ]
Мы разворачиваем строку и производим поиск с начала строки, затем разворачиваем полученный результат в обратную сторону. Таким образом направление поиска сохраняется и эмулирует ретроспективную проверку.