Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение (Regexp) (https://javascript.ru/forum/misc/26453-regulyarnoe-vyrazhenie-regexp.html)

martinss 09.03.2012 11:44

Регулярное выражение (Regexp)
 
Здравствуйте, суть задачи такова: есть большой текст, в нем имеются даты регистраций пользователей в формате dd-mm-yyy. При регистрации скрипт глюканул и год вместо 2012 подставился 2013.
Нужно при помощи регулярного выражения уменьшить все года на 1.
Задача какраз на регулярные выражения, поэтому советы по автозамене или по поправкам в БД прошу не предлагать.
Интересует именно - как это сделать в регулярном выражении.
Вот самый простой пример выражения, который я написал:
Pattern = "/\b(\d\d-\d\d-\d\d\d\d)/";
Сейчас верность формата даты не важна, важно понять как выцепить год, уменьшить его на 1 и вставить обратно в текст.

Заранее спасибо.

9xakep 09.03.2012 12:06

<script>
var str = 'olololo2013oololo'
var year = str.match(/2013/)[0] - 1
str = str.replace(/2013/, year)
alert(str)
</script>

trikadin 09.03.2012 12:09

var str = "20-12-2013. Все бухают. 21-12-2013. Все умерли.";

alert(str.replace(/(\d\d-\d\d-)(\d{4})/g, function(substr, a, b) {return a+(b-1)}))

martinss 09.03.2012 12:11

класс, а если года разные в тексте, и их все надо уменьшить на 1?

trikadin 09.03.2012 12:15

Цитата:

Сообщение от martinss
класс, а если года разные в тексте, и их все надо уменьшить на 1?

Собственно, мой вариант это позволяет... Правда, я выцепляю дату целиком, т.к. возможен вариант появления просто 4-хзначного числа в тексте (теоретически). Если же нет, то:


var str = "20-12-2013. Все бухают. 21-12-2013. Все умерли.";
alert(str.replace(/\d{4}/g, function(substr){return substr-1}))

9xakep 09.03.2012 12:19

trikadin,
Как это работает О_о
1) str.replace(/(\d\d-\d\d-)(\d{4})/g Находим год, это понятно
2) function(substr, a, b) {return a+(b-1)} Откуда эти аргументы? Если не лень можешь статейку кинуть?

trikadin 09.03.2012 12:22

9xakep, всё на этом сайте)

http://javascript.ru/basic/regular-e...herez-funkciyu

9xakep 09.03.2012 12:47

Ух ты! Круто :)

martinss 09.03.2012 13:14

всем спасибо


Часовой пояс GMT +3, время: 04:01.