'Купить !автомобиль [недорого москва] [новый или !бу]'.match(/(\s|^)(\[.*?\]|.*?)(?=(\s|$))/g).map(x=>x.trim())
а вот в php так не работает, возвращает 5 пустых элементов массива. preg_split('/(\s|^)(\[.*?\]|.*?)(?=(\s|$))/', 'Купить !автомобиль [недорого москва] [новый или !бу]')
Почему так и как можно исправить? preg_match_all('/(\s|^)(\[.*?\]|.*?)(?=(\s|$))/', 'Купить !автомобиль [недорого москва] [новый или !бу]', $m);