поиск необязательного значения с помощью рег выражения
Добрый день
Помогите с рег выражением есть элементы в тексте которые есть всегда (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> |
Если по условию text2 может и быть, и отсутствовать, то проверять его наличие нет смысла, проверяйте только наличие text1 и text3.
|
данное регулярное выражение - не проверяет наличие или отсутствие текста, оно выдирает (парсит) из текста искомые данные
З.Ы. проверять оно конечно проверяет, на соответствие основным элементам, но выдернуть нужно все, в том числе и те данные, которых может и не быть, при их наличии |
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> |
рони,
это не совсем то, я не просто так упомянул, что рег. выражение сильно упрощено как я понимаю, иных вариантов нет? либо выдергивать кусок текста между text1 и text3, и уже его обрабатывать отдельным рег выражением? |
Цитата:
|
рони,
потому что парсится код таблицы и text1 и text3 находятся в одной строке (если вообще есть) если делать через или получу кашу из значений |
Cache,
match == null ничего не найдено match.length == 2 text2 нет match.length == 3 text2 = match[1] |
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> |
рони,
<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 |
Часовой пояс GMT +3, время: 00:19. |