Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2020, 14:12
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

Найти слово начинающееся на м и состоящее больше чем из 3х букв
Здравствуйте. Делаю поиск по сайту с подсказкой слов. Бьюсь уже не первый день над регулярным выражением. Никак не выходит составить его правильно.
Есть, к примеру, строка: "мой монитор умолк".
Нужно найти слово "монитор". Использую регулярное выражение:
Код:
/\bм\w*\b/ui
в него попадает слово "мой", это слово мне не нужно.
Корректирую регулярку:
Код:
/\bм\w{3,}\b/ui
в этом случае находит слово "монитор", но если пользователь введёт слово целиком или без последних 2х букв - слово монитор не будет найдено, то есть регулярное выражение:
Код:
/\bмонито\w{3,}\b/ui
не найдет "монитор", а нужно, чтобы нашло...
Колдовство со скобками не давало нужного результата, или я чего-то недопонимаю. По сути, {3,} должно быть всего букв в слове, то есть маска должна быть какой-то примерно такой:
Код:
/\b(монито\w*){3,}\b/ui
но в данном случае она совсем не работает. Помогите, пожалуйста. https://regex101.com/r/QhHHsy/1

Последний раз редактировалось Ilya_Ru, 14.05.2020 в 14:15.
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2020, 14:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Ilya_Ru
или я чего-то недопонимаю.
на всякий случай \b это только для английских слов подходит
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2020, 14:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ilya_Ru,
<script>
   document.write("мой монитор умолк".match(/(?:^|\s+)(м[а-яё]{3,})/ui)[1])
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2020, 14:42
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

Если проблема была в использовании \b, то слово "монитор" нашлось бы с использованием даже такой регулярки: /монито\w{3,}/ui или /(монито\w*){3,}/ui , или даже без использования \w: /монито[а-я]{3,}/ui но не работает... Здесь проблема в чем-то другом... В чем - я не пойму...
В таком случае слово "монитор", увы, уже идет мимо кассы:
<script>
   document.write("мой монитор умолк".match(/(?:^|\s+)(монито[а-яё]{3,})/ui)[1])
</script>

Последний раз редактировалось Ilya_Ru, 14.05.2020 в 14:52.
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2020, 14:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ilya_Ru,
так если длина шаблона больше 3 что мешает использовать * вместо {3,}
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2020, 15:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ilya_Ru,
<script>
    let str = 'м', num = Math.max(0, 4 - str.length),
    reg = new RegExp(`(?:^|\\s+)(${str}[а-яё]{${num},})`, 'ui');
    document.write("мой монитор умолк".match(reg)[1])
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2020, 15:36
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

Достаточно интересный подход. Спасибо. А я мучал только регулярку. Хотя, я думаю, одной только регуляркой, без вспомогательных проверок, вопрос все равно бы не решился.
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2020, 18:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Malleys,
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести на странице слово "рекомендую" если рандомное число больше 20 Lefseq Общие вопросы Javascript 7 14.11.2020 20:27
как набить репутацию больше чем количество сообщений? EmperioAf Оффтопик 7 04.08.2015 14:54
Помогите найти в чем ошибка Pashok Элементы интерфейса 6 26.02.2013 20:20
[Видеокурс] JavaScript. Больше, чем просто сайт kgl32 Учебные материалы 23 07.11.2011 02:14
Размер img не больше чем у div PAMAC (X)HTML/CSS 3 21.12.2009 22:34