JavaScript RegEx не будет совпадать с переводом строки - PullRequest
0 голосов
/ 28 ноября 2018

В настоящее время я делаю простое приложение, использующее NodeJS для перевода ввода в определенный формат.Для этого я использую следующий фрагмент JavaScript, где content - это ввод.

content = content.replace(/(.+)\n=+$/gm, '<div>$1</div>');
content = content.replace(/(.+)\n-+$/gm, '<p>$1</p>');

Используя это, я ожидаю, что приведенный ниже код

Message
======

Another Message
------

переведет в

<div>Message</div>

<p>Another Message</p>

Однако я получаю тот же вывод в качестве ввода (так что ничегоизменилось),

Я попробовал это сделать как с RegExr , так и с тестером WebStorm RegEx, и оба они нашли совпадение.Когда я регистрирую результат content.match(/(.+)\n=+$/gm), я получаю null.

Когда я удаляю \n из RegEx и ввода, он, кажется, совпадает, что заставляет меня думать, что \nвызывая какую-то проблему.Тем не менее, я не знаю ни о какой проблеме, это может быть причиной.

1 Ответ

0 голосов
/ 28 ноября 2018

используете ли вы windows?

попробуйте:

content = content.replace(/(.+)\r\n=+$/gm, '<div>$1</div>');
content = content.replace(/(.+)\r\n-+$/gm, '<p>$1</p>');

в зависимости от ОС и браузера вы можете туда добраться \n или \r\n (\r обозначает перевозкувозвращение, они могут быть другими причинами их появления, но в вашем регулярном выражении вы должны ожидать либо \n, либо \r\n

Редактировать:

В соответствии с предложением Пол Бак Вы можете просто добавить ? после \r для обработки обоих случаев:

content = content.replace(/(.+)\r?\n=+$/gm, '<div>$1</div>');
content = content.replace(/(.+)\r?\n-+$/gm, '<p>$1</p>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...