Как исключить паттерн из совпадений

Пытаюсь выбрать слова, больше 1 символа, и так же исключить из этих слов числа. Сделал пример https://regex101.com/r/5QVvXp/1/. Почему ".0" (и другие числа после точки) входят в совпадения?

Само выражение (?!-?\d+(\.\d+)?)\S{2,}

Текст -553.2 3442 тут.тут там-там3 -133.0 235.5

В результате нужны только тут.тут и там-там3


Ответы (1 шт):

Автор решения: vsemozhebuty

Возможно, вам подойдёт чуть более простая регулярка? Правда, она будет отсеивать формально и скопление цифр с несколькими точками, то есть строго говоря не только правильные числа. Но, возможно, это для вас несущественно. Пример на JavaScript:

const string = ' -553.2  3442   тут.тут  там-там3  -133.0  235.5';

console.log(string.match(/(?!-?[\d.]+)\S{2,}/g));

Для страховки можно ещё добавить утверждения нулевой длины: чтобы попадали только слова, окружённые пробелами или границами строки, если ваш диалект регулярок их поддерживает. Но имейте в виду, что наличие пунктуации рядом со словами будет требовать дополнительных усилий, если не хотите, чтобы пунктуация попадала в слова (скобки, кавычки, запятые и т.д.).

const string = ' -553.2  3442   тут.тут  там-там3  -133.0  235.5';

console.log(string.match(/(?<=^|\s)(?!-?[\d.]+)\S{2,}(?=\s|$)/g));

→ Ссылка