Я сейчас нахожусь в процессе создания регулярного выражения, которое анализирует для следующего формата:
«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.