Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2013, 15:49
Интересующийся
Отправить личное сообщение для vivalaakam Посмотреть профиль Найти все сообщения от vivalaakam
 
Регистрация: 07.02.2012
Сообщений: 14

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

Есть ли способ более изящный и короткий?
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2013, 16:20
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

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

Последний раз редактировалось rgl, 22.01.2013 в 16:34.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2013, 16:32
Интересующийся
Отправить личное сообщение для vivalaakam Посмотреть профиль Найти все сообщения от vivalaakam
 
Регистрация: 07.02.2012
Сообщений: 14

Да, сначала строка чистится от всего лишнего, потом отбираются необходимые слова
Ответить с цитированием
  #4 (permalink)  
Старый 22.01.2013, 16:42
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

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, " " )

Последний раз редактировалось rgl, 22.01.2013 в 16:48.
Ответить с цитированием
  #5 (permalink)  
Старый 22.01.2013, 16:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 22.01.2013 в 22:10.
Ответить с цитированием
  #6 (permalink)  
Старый 22.01.2013, 17:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Дзен-трансгуманист
/^[\+\-]?[0-9a-fA-F]+$/.test( string );
Вроде Да, (*если только hex всегда идет от начала строки

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

Последний раз редактировалось Deff, 22.01.2013 в 17:52.
Ответить с цитированием
  #7 (permalink)  
Старый 22.01.2013, 17:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Дзен-трансгуманист,
alert(/^[+-]?[\da-f]{1,6}$/i.test( "+ddd" ));
Ответить с цитированием
  #8 (permalink)  
Старый 22.01.2013, 17:50
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от рони Посмотреть сообщение
Дзен-трансгуманист,
alert(/^[+-]?[\da-f]{1,6}$/i.test( "+ddd" ));
Все правильно, 0-9 можно заменить на \d плюс внутри кв.скобок маскировать не надо, минус не надо если он первый или последний, только не понятно почему {1,6}, разве цифр не может быть больше шести? Чтобы записать тридцатидвухбитное число, уже нужно 8 цифр, а ведь бывают и 64-битные
Ответить с цитированием
  #9 (permalink)  
Старый 22.01.2013, 18:42
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от 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

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

Сообщение от Дзен-трансгуманист
простите за мое нубство в регах
вот мы и нащупали его слабое место
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 22.01.2013, 20:56
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Дзен-трансгуманист
А можно поподробнее?
поторопился. Был не прав. Все нормально )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходими разделить строку на слова и положить слова в массив при помощи цикла for oneee Общие вопросы Javascript 5 05.09.2012 14:30
Обрезать строку vladvk Серверные языки и технологии 4 23.03.2012 16:24
Как обрезать строку в переменной mazovski Общие вопросы Javascript 2 08.04.2010 17:14
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19