Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2019, 12:30
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

поиск необязательного значения с помощью рег выражения
Добрый день
Помогите с рег выражением
есть элементы в тексте которые есть всегда (text1 и text3), а часть может присутствовать или нет (text2)
упростил выражение, для публикации тут:
/(text1).*?(text2)?.*?(text3)/

где text2 - это тот текст, который как может быть в строке, так может и отсутствовать
но даже если он присутствует, выражение его не сохраняет в найденных
что делаю не так?

<script>
var 
   str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3', 
   rx=/(text1).*?(text2)?.*?(text3)/;
document.write(rx.exec(str).join('<br>'));
</script>

Последний раз редактировалось Cache, 06.10.2019 в 12:41.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2019, 13:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если по условию text2 может и быть, и отсутствовать, то проверять его наличие нет смысла, проверяйте только наличие text1 и text3.
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2019, 13:45
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

данное регулярное выражение - не проверяет наличие или отсутствие текста, оно выдирает (парсит) из текста искомые данные
З.Ы. проверять оно конечно проверяет, на соответствие основным элементам, но выдернуть нужно все, в том числе и те данные, которых может и не быть, при их наличии

Последний раз редактировалось Cache, 06.10.2019 в 13:51. Причина: добавление P.S.
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2019, 15:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Cache,
<script>
var str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3',
    rx=/(text1|text2|text3)/g;
document.write(str.match(rx).join('<br>'));
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2019, 15:20
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

рони,
это не совсем то, я не просто так упомянул, что рег. выражение сильно упрощено
как я понимаю, иных вариантов нет? либо выдергивать кусок текста между text1 и text3, и уже его обрабатывать отдельным рег выражением?
Ответить с цитированием
  #6 (permalink)  
Старый 06.10.2019, 15:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от Cache
это не совсем то
почему?
Ответить с цитированием
  #7 (permalink)  
Старый 06.10.2019, 17:47
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

рони,
потому что парсится код таблицы и text1 и text3 находятся в одной строке (если вообще есть)
если делать через или получу кашу из значений
Ответить с цитированием
  #8 (permalink)  
Старый 06.10.2019, 17:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Cache,
match == null ничего не найдено
match.length == 2 text2 нет
match.length == 3 text2 = match[1]
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2019, 17:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Cache,
<script>
var str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3',
    rx=/(^text1|text2|text3$)/g,
    match = str.match(rx)||[];
document.write(match.length ===3 && match[1]);
</script>
Ответить с цитированием
  #10 (permalink)  
Старый 06.10.2019, 18:21
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

рони,
<script>
var str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3',
    rx=/(^text1|text2|text3$)/g,
    match = str.match(rx)||[];
document.write(match);
</script>

а должно было быть так:
text1,text2,text3,text1,text3,text1,text2,text3

Последний раз редактировалось Cache, 06.10.2019 в 18:23. Причина: add comment
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу для вычисления значения выражения: vanya_xa Общие вопросы Javascript 1 17.02.2018 20:46
Вывод значения из JSON с помощью JS Win_D Общие вопросы Javascript 9 15.09.2016 10:15
Помогите с кодом. Поиск и вывод нужного значения Sav2907 Элементы интерфейса 30 17.09.2015 16:54
Вычисление значения выражения без eval Matre Общие вопросы Javascript 6 19.11.2011 12:04
поиск значения среди опр. тега cristaloleg Элементы интерфейса 2 26.04.2010 17:50