Javascript заменить регулярное выражение \\ n на \ n, \\ t на \ t, \\ r на \ r и т. Д. - PullRequest
3 голосов
/ 09 февраля 2020

У меня есть поле ввода HTML, в котором пользователь может ввести разделитель.

Этот разделитель может содержать \n, \t, \r и т. Д. Когда я добавляю разделитель к строке в javascript, он добавляется как \ n вместо символа новой строки.

Хотя я могу использовать str.replace(/\\n/g, "\n") и т. Д. Для замены одного варианта, он не будет работать, если Я пишу общее регулярное выражение типа «все поймать», например str.replace(/\\([a-z])/g, "\$1"), поскольку это просто заменяет \ n на \ n снова.

Как мне переписать RegExp, чтобы заменить все двойные обратные слэши перед символом?

1 Ответ

1 голос
/ 09 февраля 2020

Нет ярлыка для замены литералов экранированными последовательностями, но вы можете использовать это:

const cmap = {'n': '\n', 't': '\t', 'r': '\r'}

var str = `value1\rvalue2\tvalue3\nvalue4`

str = str.replace(/\\([nrt])/g, m => {return cmap[m[1]]})

console.log(str)
...