Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.11.2015, 19:40
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Как найти все вхождения искомого слова при помощи регулярного выражения?
Мое регулярное выражение и пример текста https://regex101.com/r/yL0jL5/1

Почему он находит только первое вхождение слова Людовик?
Как сделать, чтобы и последующие тоже нашлись?

Мне нужно найти всех Людовиков после решетки
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #2 (permalink)  
Старый 01.11.2015, 19:50
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

khusamov, во первых, нужно убрать жадность. Во вторых, "точка" - любой символ кроме переноса строки.

#[\s\S]*(Людовик)
Ответить с цитированием
  #3 (permalink)  
Старый 01.11.2015, 21:36
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Подставил #[\s\S]*(Людовик)
https://regex101.com/r/eD7dE5/1

К сожалению он нашел только последнего Людовика после решетки. А нужно всех найти.

Вот ссылка на полученный результат
https://regex101.com/r/eD7dE5/1
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #4 (permalink)  
Старый 01.11.2015, 21:39
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вот примерно что нужно получить:
#[\s\S]*?(Людовик)[\s\S]*?(Людовик)[\s\S]*?(Людовик)[\s\S]*

Но нужно найти всех Людовиков после решетки
Причем их количество заранее не известно
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #5 (permalink)  
Старый 01.11.2015, 22:00
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

/#((?:[\s\S]*?людовик[a-z]*)+)/gi
Ответить с цитированием
  #6 (permalink)  
Старый 01.11.2015, 22:04
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Подставил /#((?:[\s\S]*?людовик[a-z]*)+)/gi
но он нашел один MATCH причем весь текст после решетки...
Вот песочница: https://regex101.com/r/tL1oB6/2
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #7 (permalink)  
Старый 01.11.2015, 22:23
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Мне вот интересно, вы когда регулярные выражения изучаете, хотя бы приблизительно имеете представление:
1. какие задачи ими решаются
1.1. как именно решаются
2. какие задачи ими не решаются
?
Иными словами для чего они применяются, а для чего НЕ применяются?

'use strict'

let text = `
ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL


ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL


# ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL



ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL`;

let array = text
	.split('\n')
	.filter(x => /^#/.test(x))
    .map(x => x.match(/Людовик[XLVI]+/g));


alert(JSON.stringify(array));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 01.11.2015, 22:31
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

Сообщение от khusamov
Подставил /#((?:[\s\S]*?людовик[a-z]*)+)/gi
но он нашел один MATCH причем весь текст после решетки...
А как Вы хотите? По отдельности каждый? Если да, то так сделать не получится, только если получить всех "людвиков", а потом их разбить по другому шаблону.
Ответить с цитированием
  #9 (permalink)  
Старый 01.11.2015, 22:39
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Программным способ так делять нельзя. У меня библиотека, которая требует на входе регулярное выражение. Библиотеку я переписать не могу. Она требует, чтобы я ОДНИМ регулярным выражением нашел всех Людовиков после решетки.

В общем похоже эту задачу регулярным выражением не решить...
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить пользователь сам нажал элемент или при помощи функции click(); finlandia Элементы интерфейса 13 10.01.2013 21:09
Название ячейки таблицы Questioner Общие вопросы Javascript 6 16.02.2011 08:58
Как отразить картинку при помощи JS. 2dkott Элементы интерфейса 4 03.09.2009 21:51
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 13:37
Подскажите как при помощи JS hta в трею свернуть kimboo Общие вопросы Javascript 4 11.07.2008 15:00