Ликбез по регулярным выражениям

Обсуждение различных вопросов, связанных с разработкой и эксплуатацией 1С-Предприятия 8.X
Ответить
Classic
Сообщения: 154
Зарегистрирован: 24 авг 2011, 17:26

Ликбез по регулярным выражениям

Сообщение Classic »

Вчера впервые использовал их в работе. Могучая штука, только много еще не понятно.
Задача - получить номер без префикса.
Пример номера:
РНП-У-08/15-016
С помощью шаблона "\d+[/-]*\d*[/-]*\d*" получаю подстроку "08/15-016". Но заказчик хочет, чтобы в первой и последней группе цифр удалялись лидирующие нули.
Например:
08/15-016 - 8/15-16
07/06-001 - 7/06-1
07/09-011 - 7/09-11
Реально это сделать регулярными выражениями, или проще как проще?
Аватара пользователя
kuntashov
Сообщения: 448
Зарегистрирован: 24 авг 2011, 15:53
Откуда: Саратов
Контактная информация:

Re: Ликбез по регулярным выражениям

Сообщение kuntashov »

Регулярные выражения предназначены как для поиска так и для замены значений, большинство библиотек это поддерживают.
Твоя задача при помощи регулярок на JavaScript решается так:

Код: Выделить всё

var numDoc = "РНП-У-08/15-016";
datePart = numDoc.replace(/^.+?(\d+[\/\-]*\d*[\/\-]*)0*(\d*)$/, "$1$2");
print(datePart); // выведет 08/15-16


Побаловаться можно здесь: http://ideone.com/TwJcZ
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
sosnae
Сообщения: 588
Зарегистрирован: 20 дек 2011, 10:31
Откуда: Украина, Запорожье

Re: Ликбез по регулярным выражениям

Сообщение sosnae »

Я бы выделил группы, а потом уже к группам применил бы регулярное выражение. Так легче для понимания. А то иногда встречаешь комментарии для регулярок "Простите, это реально работает."
2012-08-28_1307.png
2012-08-28_1307.png (73.72 КБ) 37233 просмотра
Аватара пользователя
kuntashov
Сообщения: 448
Зарегистрирован: 24 авг 2011, 15:53
Откуда: Саратов
Контактная информация:

Re: Ликбез по регулярным выражениям

Сообщение kuntashov »

Наличие групп влияет на производительность, но да, в данном случае это совершенно несущественно.
Еще с кватификатором * спорно - к месту ли он ). Скорее, там можно было бы что-то конкретнее написать (типа \d\d или \d{0,3}), потому что длина номера ограничена.

p.s.
Классный скриншот, че :D
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
Classic
Сообщения: 154
Зарегистрирован: 24 авг 2011, 17:26

Re: Ликбез по регулярным выражениям

Сообщение Classic »

* ставил для обратной совместимости - старые номера имеют формат ПараБуквМногоЦифр.
А скриншот хороший - благодаря ему нашел скрипт "RegExpEditor.js". С ним намного проще.
Ответить