Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Regexp обрезать короткие слова (https://javascript.ru/forum/misc/34867-regexp-obrezat-korotkie-slova.html)

vivalaakam 22.01.2013 15:49

Regexp обрезать короткие слова
 
Добрый день.
Пытаюсь с помощью regexp вырезать из строки все слова, длина которых меньше 3х символов, а так же все символы, в общем должны остаться в идеале буквы и цифры =)
В данный момент проблема решается таким образом:
"А б,в гд?е ж-з и !кл мно п(р_с)т".replace(/[^A-Za-zА-Яа-я0-9 ]/ig , "").match(/[A-Za-zА-Яа-я0-9]{3,}/ig).join(" ")

Есть ли способ более изящный и короткий?

rgl 22.01.2013 16:20

Не совсем понятно что считать словами. В вашем примере
"А б,в гд?е ж-з и !кл мно п(р_с)т"
из гд?е сначала удаляется вопрос, и получается слово длиной 3 буквы. Так и должно быть?
Кста, если в самом выражении уже есть и большие и маленькие буквы, зачем флаг i?

vivalaakam 22.01.2013 16:32

Да, сначала строка чистится от всего лишнего, потом отбираются необходимые слова

rgl 22.01.2013 16:42

replace( /[^A-Za-zА-Яа-я1-9]+([A-Za-zА-Яа-я1-9]{1,2}[^A-Za-zА-Яа-я1-9]+)*/g, " " )
З.Ы.
Сорри, написал раньше, чем прочитал предыдущее сообщение, ща поправлю
З.Ы.2
Если так?
replace(/[^A-Za-zА-Яа-я0-9 ]/g , "").replace( /[^A-Za-zА-Яа-я1-9]+([A-Za-zА-Яа-я1-9]{1,2}[^A-Za-zА-Яа-я1-9]+)*/g, " " )

Deff 22.01.2013 16:47

str="А б,в гд?е ж-з и !кл мно п(р_с)т"
str=(' '+str).split(/(?:\s|,)\S{1,2}(?=\s|,)/i).join('');
alert(str)

Deff 22.01.2013 17:34

Цитата:

Сообщение от Дзен-трансгуманист
/^[\+\-]?[0-9a-fA-F]+$/.test( string );

Вроде Да, (*если только hex всегда идет от начала строки

так чуть проще
var string ='+DD345435'
alert(/^[\+\-]?[0-9A-F]+$/i.test( string ))

рони 22.01.2013 17:42

Дзен-трансгуманист,
alert(/^[+-]?[\da-f]{1,6}$/i.test( "+ddd" ));

rgl 22.01.2013 17:50

Цитата:

Сообщение от рони (Сообщение 228754)
Дзен-трансгуманист,
alert(/^[+-]?[\da-f]{1,6}$/i.test( "+ddd" ));

Все правильно, 0-9 можно заменить на \d плюс внутри кв.скобок маскировать не надо, минус не надо если он первый или последний, только не понятно почему {1,6}, разве цифр не может быть больше шести? Чтобы записать тридцатидвухбитное число, уже нужно 8 цифр, а ведь бывают и 64-битные

nerv_ 22.01.2013 18:42

Цитата:

Сообщение от rgl
replace(/[^A-Za-zА-Яа-я0-9 ]/g , "").replace( /[^A-Za-zА-Яа-я1-9]+([A-Za-zА-Яа-я1-9]{1,2}[^A-Za-zА-Яа-я1-9]+)*/g, " " )

буквы ё в русском языке больше нет?

Цитата:

Сообщение от Deff
/^\S{1,2}(?=\s|,)|(?:\s|,)\S{1,2}(?=\s|,)/i

игнор кейс к чему? )

Цитата:

Сообщение от Дзен-трансгуманист
Мне нужно проверить, состоит ли строка полностью из hex-символов (как минимум из одного из них)

но при этом данная рега не гарантирует ее валидность

Цитата:

Сообщение от rgl
Все правильно, 0-9 можно заменить на \d

Цитата:

Сообщение от Дзен-трансгуманист
допускаются только ASCII


Цитата:

Сообщение от Дзен-трансгуманист
А это не захватит другие цифры юникода?

захватит

Цитата:

Сообщение от Дзен-трансгуманист
простите за мое нубство в регах

вот мы и нащупали его слабое место :D

nerv_ 22.01.2013 20:56

Цитата:

Сообщение от Дзен-трансгуманист
А можно поподробнее?

поторопился. Был не прав. Все нормально )


Часовой пояс GMT +3, время: 09:40.