заменить \ r \ n на <br /> как текст - PullRequest
1 голос
/ 07 мая 2020

Пытаюсь в течение 2 часов заменить \ r \ n на
, но это кажется невозможным.
Я не знаю, что делаю! Пожалуйста, помогите!

const text = '"Hello!\r\n\r\nThis is a dog!'

const checkText = str=> {
  const match = /\r|\n/.exec(text);
  if (match) {
    //return str.replace(/(?:\\[rn]|[\r\n]+)+/g, '<br/>');
    return str.replace('/r/n', '<br/>');
  }
  return str;
};
checkText(text)

Ответы [ 4 ]

2 голосов
/ 07 мая 2020

Просто сделайте это:

text.replace(/\r\n/g, '<br/>');
1 голос
/ 07 мая 2020

В вашем коде есть несколько ошибок:

  1. String.prototype.replace заменяет только первое вхождение строки. Вам необходимо использовать аргумент регулярного выражения с флагом /g для замены всех вхождений.
  2. Escape используют обратную SLA sh, а не прямую sla sh: используйте \r\n , а не /r/n.
  3. checkText возвращает string, но ваш сайт вызова ничего не делает с возвращенной строкой - она ​​просто отбрасывается. Строки неизменны в JavaScript.

Я не рекомендую использовать строки для хранения HTML, потому что это может (очень легко) вызвать HTML -инъекцию (включая <script> -инъекцию) атаки.

Вместо этого выполните одно из следующих действий:

  • Используйте String.prototype.split и HTML - закодируйте каждый string в массиве и join с "<br />".
  • Добавьте строку прямо в документ с помощью .textContent (больше не используйте innerText) и присвойте родительскому элементу стиль CSS whitespace: pre-wrap;.
1 голос
/ 07 мая 2020

Охватывает все возможные комбинации символов новой строки.

String tmp = s.replaceAll("\r\n", "<br>"); // Windows
tmp = tmp.replaceAll("\r", "<br>");        // Old MAC
return tmp.replaceAll("\n", "<br>");       // Linux / UNIX
0 голосов
/ 07 мая 2020

Вы можете попробовать:

(text+ '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br/>$2');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...