Как исключить паттерн из совпадений
Пытаюсь выбрать слова, больше 1 символа, и так же исключить из этих слов числа. Сделал пример https://regex101.com/r/5QVvXp/1/. Почему ".0" (и другие числа после точки) входят в совпадения?
Само выражение (?!-?\d+(\.\d+)?)\S{2,}
Текст -553.2 3442 тут.тут там-там3 -133.0 235.5
В результате нужны только тут.тут и там-там3
Ответы (1 шт):
Возможно, вам подойдёт чуть более простая регулярка? Правда, она будет отсеивать формально и скопление цифр с несколькими точками, то есть строго говоря не только правильные числа. Но, возможно, это для вас несущественно. Пример на 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));