3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 281
1

Оптимизировать регулярное выражение

17.08.2018, 12:57. Показов 2161. Ответов 6

Author24 — интернет-сервис помощи студентам
Есть выражение такого вида S-dd-d, где S - символ латиницы, d - цифры. причём, допустимы комбинации, когда есть только начальные символы, т.е. вида:S. S-. S-d. S-dd, S-dd-

Нужно его валидность проверить. Не придумал ничего лучше вот такого выражения:

/^[A-Za-z]{1}-{1}\d{2}-{1}\d?$|^[A-Za-z]{1}-{1}\d{1,2}$|^[A-Za-z]{1}-{1}\d{2}-?$|^[A-Za-z]{1}-?$|^[A-Za-z]{1}$/

Т.е. фактически, сложил по 'или' все возможные варианты. А можно его как-то оптимизировать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2018, 12:57
Ответы с готовыми решениями:

Регулярное выражение
Всем привет. Использую динамическое переключение страниц и по индификатору 'page' получаю какую...

Регулярное выражение
Здравствуйте! Не могли бы вы помочь составить регулярные выражения? 1. Строки из «a», «b» и «c», в...

Регулярное выражение
Здравствуйте всем, Написал одно регулярное выражение для замены. replace(/\<img src\=\"(.*?)\"...

Регулярное выражение
<input name="inp" value="text 1 i text 2 pam pam 123,32 piy" oninput="price(this)" /> function...

6
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
17.08.2018, 21:51 2
В JavaScript пока нет look behind, поэтому пока только так:
Javascript
1
2
3
4
        let str = "y";
        //let reg =  /^\p{L}-?((?<=-)\d{1,2})?((?<=\d{2})-)?((?<=-)\d)?$/;
        let reg = /^[a-z]$|^[a-z]-\d{0,2}$|^[a-z]-\d{2}-$|^[a-z]-\d{2}-\d$/i;
        alert(reg.test(str));
Закомментирован как раз look behind.
1
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
17.08.2018, 23:09 3
Лучший ответ Сообщение было отмечено Abejon как решение

Решение

Javascript
1
/^[a-z](|-\d{0,2}|-\d\d-\d?)$/i
1
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 281
20.08.2018, 05:26  [ТС] 4
Спасибо. А как работает символ '|' после '('? Без него выражение работает некорректно: S- не принимается, хотя и должно. Но как он работает?
0
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
20.08.2018, 12:38 5
Цитата Сообщение от Abejon Посмотреть сообщение
Спасибо. А как работает символ '|' после '('? Без него выражение работает некорректно: S- не принимается, хотя и должно. Но как он работает?
Он как обычно разделяет несколько альтернативных вариантов подмаски.
Там в скобках три альтернативы: пустая строка, -\d{0,2}, -\d\d-\d?.

Этот фрагмент можно записать иначе: (-\d{0,2}|-\d\d-\d?)?
1
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 281
20.08.2018, 13:48  [ТС] 6
Там в скобках три альтернативы: пустая строка
- вот пустую строку я не увидел. Теперь понятно, почему без '|' не хочет работать. Спасибо.
Да, а можно добавить пустую строку в разрешённые комбинации? Если да, то как?
0
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
20.08.2018, 14:52 7
Лучший ответ Сообщение было отмечено Abejon как решение

Решение

Цитата Сообщение от Abejon Посмотреть сообщение
- вот пустую строку я не увидел. Теперь понятно, почему без '|' не хочет работать. Спасибо.
Да, а можно добавить пустую строку в разрешённые комбинации? Если да, то как?
Между началом строки ^ и концом строки $ должно быть пусто ^$

^[a-z](-\d{0,2}|-\d\d-\d?)?$|^$
1
20.08.2018, 14:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2018, 14:52
Помогаю со студенческими работами здесь

Непонятное регулярное выражение
Доброго всем дня! Подскажите пожалуйста что означает вот это выражение replace(/\//, '') Спасибо.

Составить регулярное выражение
Нужно найти в коде функцию и раскрасить её. Вот составил регулярку для функции: var FuncRegExp =...

Подскажите регулярное выражение
Подскажите регулярное выражение, при помощи которого можно было бы извлечь все находящееся между...

Подскажите регулярное выражение
Необходимо найти все теги таблицы с различной шириной, т.е. найти все строки типа: &lt;table...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru