RegEx не оценивает должным образом с чертой характера - PullRequest
0 голосов
/ 23 января 2019

Я сейчас нахожусь в процессе создания регулярного выражения, которое анализирует для следующего формата: «20 января 2009 г. - 20 января 2017 г.»

Однако, несмотря на то, что значение правильно обрабатывается в RegEx101, оно неправильно анализируется в javascript.

var text = "January 20, 2009 – January 20, 2017";
alert(text);
var replacedText = text.replace(/(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d[ ][\p{Pd}][ ](January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d/gi,'Replace Me');

alert(replacedText);

Мне любопытно, что моя ошибка. Мои проблемы возникают, когда дело доходит до оценки характера черты. Для тех, кто не хочет запускать мой код, вот RegEx

/ (Январь | Февраль | Март | Апрель | Май | Июнь | Июль | Август | Сентябрь | Октябрь | Ноябрь | Декабрь | Январь | Февраль | Март | Апрель | Май | Июнь | Июль | Август | Сентябрь | Октябрь | Ноябрь | Dec) [,] [] \ d \ d \ d \ d [] [\ p {Pd}] [,] [] \ d \ d \ d \ d / gi

[\ p {Pd}] - код, который приводит к путанице в RegEx (я полагаю).

Я должен отметить, что в настоящее время я тестирую этот код на javascript для расширения Chrome. Кроме того, когда приведенный выше код работает как расширение Chrome, в окне предупреждения выводится следующее:

«20 января 2009 г. - 20 января 2017 г.»

Редактировать : Я изменил RegEx, добавив в выражение символ unicode en и em, и код все еще не работает. Это новое решение, которое я придумал:

var text = "January 20, 2009 – January 20, 2017";
alert(text)
var replacedText = text.replace(/(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d[ ][\u2013\u2014\-][ ](January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]([1-9]|[12][0-9]|3[01])[ ,][ ]\d\d\d\d/gi,'Replace Me');
alert(replacedText);

Рассматриваемая часть теперь [\ u2013 \ u2014 -]

Редактировать 2 : Похоже, новый код работает в поле фрагмента кода выполнения, но не в скрипте содержимого Chrome.

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