Вы хотите удалить все @
, которые не заключены в пробелы и не сопровождаются цифрой.Самый простой подход состоит в том, чтобы сопоставить и захватить @
, заключенный в пробелы, и сопоставить все остальные @
, за которыми не следует цифра, и заменить на заполнитель группы 1, $1
:
s.replace(/((?:^|\s)@)(?!\S)|@(?!\d)/g, '$1')
См. regex demo
Подробности
((?:^|\s)@)(?!\S)
- Группа 1: начало строки или пробела ((?:^|\s)
) изатем @
, за которым не следует непробельный символ ((?!\S)
, равный (?=\s|$)
, пробел или конец строки) |
- или @(?!\d)
- за @
не следует цифра ((?!\d)
- это отрицательный прогноз, который не соответствует совпадению, если сразу справа от текущего местоположения есть цифра)