2016-10-27 2 views
1

Попытка придумать процесс в JavaScript, чтобы помочь преобразовать пользовательские форматы дат между различными технологическими стеками, чтобы они все разобрали и отображали все одинаково.RegEx исключить серию из 4 повторяющихся символов, но поймать 2 повторяющихся символа

У меня возникли проблемы придумать хороший RegEx для преобразования,

"dddd, dd/MM/yyyy" в "dddd, DD/MM/yyyy"

, а также,

"ddd, dd/MM/yyyy" в "ddd, DD/MM/yyyy"

Я попытался отрицательный предпросмотр и знаю, что я могу сделать что-то вроде (?!d{3,4}), чтобы исключить набор dddd и ddd. Я знаю, что я также могу сделать d{1,2}, чтобы поймать dd. Но когда я положил их вместе, а /(?!d{3,4})(d{1,2})/g также ловит последние два дд внутри дддд и дает мне

"ddDD, DD/MM/yyyy"

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

/(?=\b|^)(?!d*([d])\1\1\w*)d+(?:\b|$)/g

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

+0

Похоже, что вам нужно '/ \ bd {2} \ b/g' - https://regex101.com/r/R0bBvJ/1 –

+0

Не использовать регулярное выражение? Каким образом возникает вопрос о регулярном выражении - вам либо нужна библиотека дат (в зависимости от того, сколько слоев она проходит, хотя некоторые из них будут иметь встроенные), либо вы выполняете простые манипуляции с строками, чтобы изменить порядок элементов даты или вас вообще не делайте этого. Я уверен, что 'dd' и' DD' совершенно разные. Кроме того, просто преобразуйте их в стандартный формат, например ISO 8601, и передайте его. – vlaz

ответ

1

/(?=\b|^)(?!d*([d])\1\1\w*)d+(?:\b|$)/g regex просто соответствует dd в целом словечко.

\b (если следовать слову char) также соответствует началу строки, поэтому нет смысла использовать (?=\b|^), это то же самое, что и ^.

\w* в конце отрицательного обзора не требуется, он избыточен, как и любой другой необязательный подшаблон внутри негативного изображения.

Таким образом, вы можете использовать /\bdd\b/g.

+0

Это работает отлично. Как это решение исключает ddd? –

+0

Точно так же, как это делается в вашем шаблоне, я просто сводил группы с якорями и границами слов к простым [** границам слов **] (http://www.regular-expressions.info/wordboundaries.html). –