misc/class
lib/jquery_pnotify, lib/moment, lib/lodash, misc/notification, site/engine, misc/social
if( $.browser.msie && $.browser.version <= 8 ) include('lib/respond'); $._social.__cfg = {"init":[{"service":"basic"},{"fb_app_id":"1997094873850041","service":"fb"},{"vk_app_id":"2978320","service":"vk"},{"service":"twi"}],"like":[{"service":"fb"},{"service":"vk"},{"via":"","channel":"","hash_tag":"","service":"twi"}]}; window._SiteEngine = new classes.SiteEngine( { user_id: 0, controller: 'content_article', action: 'view', content_css_version: '1459538664', social_enabled: 0} );

Faiwer

Блог web-программиста

Regexp - вырезать слова менее Х символов

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

s = 'aa bbb c d e ff gggg qq';
s = (' '+s+' ').replace(/ +/g,' ');
s.replace(/ \S{1,2} /g,'').replace(/ +/g,' ').trim();

  1. Добавляем по одному пробелу в начало и конец строки. Это необходимо для упрощения дальнейшего regexp-а, т.к. позволяет избежать дополнительной проверки при идентификации слова;
  2. Дублируем все пробелы, специально для того, чтобы при вырезании коротких слов, оставшиеся не склеивались;
  3. Вырезаем всё, что подходит под описание - 1 пробел + 1 или 2 не пробела + 1 пробел. И в итоге у нас остаётся строка, в которой наличиствуют только многочисленные пробелы и слова, подходящие под запрос
  4. Убираем лишние пробелы, при помощи / +/g , и дело в шляпе :)

Строго НЕ рекомендую использовать сий метод хоть где-либо, где необходима адекватная производительность. К примеру, того же самого можно достичь в php, используя explode, foreach и mb_strlen. Ну и на последок, для тех, кому регулярные выражения кажутся совсем уж дремучим лесом, следующее выражение позволяет просто вырезать все слова из строки:

s.match(/\S+/g)
Если перевести его на русский язык, получим:

  1. первый и последний / означают то, что между ними находится регулярное выражение
  2. флаг g, сообщает о том, что применить regexp следует многократно, если его убрать, то вы получите только первое слово
  3. \S - означает, что нас интересуют все символы, не являющиеся пробелами, табуляциями или переводом строки
  4. \S+ - говорит о том, что должен быть хотя бы 1 символ, но можно и более. Если убрать +, то вы получите список всех пробельных символов в строке, если оставить, то парсер regexp-движка, наткнувшись на первый не пробельный символ, будет искать их далее вплоть до того, пока не закончится строка, или попадётся любой символ не подходящий под \S, то есть пробел, табуляция или перевод строки.

 Если эта тема вас заинтересовала, то рекомендую ознакомиться со следующим руководством phpclub.ru.

Комментарии
Оставить комментарий
Оставить комментарий:
Отправить через:
Предпросмотр
modules/comment
window._Comment_content_article_84 = new classes.Comment( '#comment_block_content_article_84', { type: 'content_article', node_id: '84', user: 1, user_id: 0, admin: 0, view_time: null, msg: { empty: 'Комментарий пуст', ask_link: 'Ссылка:', ask_img: 'Ссылка на изображение:' } });