Недавно столкнулся с задачей - как при помощи регулярных выражений вырезать из строки все слова короче 3 символов (может быть применено, к примеру, при составлении запроса поиска слов в бд). Долго поламав над этим голову, наткнулся на такое вот решение:
s = 'aa bbb c d e ff gggg qq'; s = (' '+s+' ').replace(/ +/g,' '); s.replace(/ \S{1,2} /g,'').replace(/ +/g,' ').trim();
- Добавляем по одному пробелу в начало и конец строки. Это необходимо для упрощения дальнейшего
regexp
-а, т.к. позволяет избежать дополнительной проверки при идентификации слова; - Дублируем все пробелы, специально для того, чтобы при вырезании коротких слов, оставшиеся не склеивались;
- Вырезаем всё, что подходит под описание -
1 пробел
+1 или 2 не пробела
+1 пробел
. И в итоге у нас остаётся строка, в которой наличиствуют только многочисленные пробелы и слова, подходящие под запрос - Убираем лишние пробелы, при помощи
/ +/g
, и дело в шляпе :)
Строго НЕ рекомендую использовать сий метод хоть где-либо, где необходима адекватная производительность. К примеру, того же самого можно достичь в php
, используя explode
, foreach
и mb_strlen
. Ну и на последок, для тех, кому регулярные выражения кажутся совсем уж дремучим лесом, следующее выражение позволяет просто вырезать все слова из строки: s.match(/\S+/g)
Если перевести его на русский язык, получим:
- первый и последний
/
означают то, что между ними находится регулярное выражение - флаг
g
, сообщает о том, что применитьregexp
следует многократно, если его убрать, то вы получите только первое слово \S
- означает, что нас интересуют все символы, не являющиеся пробелами, табуляциями или переводом строки\S+
- говорит о том, что должен быть хотя бы 1 символ, но можно и более. Если убрать +, то вы получите список всех пробельных символов в строке, если оставить, то парсер regexp-движка, наткнувшись на первый не пробельный символ, будет искать их далее вплоть до того, пока не закончится строка, или попадётся любой символ не подходящий под\S
, то есть пробел, табуляция или перевод строки.
Если эта тема вас заинтересовала, то рекомендую ознакомиться со следующим руководством phpclub.ru.