Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

Posted

技术标签:

【中文标题】Javascript 将正则表达式 \\\\n 替换为 \\n,将 \\\\t 替换为 \\t,将 \\\\r 替换为 \\r 等等【英文标题】:Javascript replace regexp \\n with \n, \\t with \t, \\r with \r and so onJavascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等 【发布时间】:2020-05-24 18:23:51 【问题描述】:

我有一个 html 输入字段,用户可以在其中输入分隔符。

此分隔符可以包括\n, \t, \r 等。当我将分隔符附加到 javascript 中的字符串时,它被附加为 \n 而不是换行符。

虽然我可以使用 str.replace(/\\n/g, "\n") 等来替换一个变体,但如果我编写一个通用的包罗万象的正则表达式,例如 str.replace(/\\([a-z])/g, "\$1"),它就不起作用,因为这只是再次将 \n 替换为 \n。

如何重写 RegExp 以替换字符前的所有双反斜杠?

【问题讨论】:

正如我在帖子中所写的那样,我只想有一个通用的解决方案,而不是现在链接 .replace(/\\n/g, "\n").replace(/\ \t/g, "\t").replace(/\\r/g, "\r") 等等。 【参考方案1】:

没有用转义序列替换文字的捷径,但你可以使用这个:

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)

【讨论】:

以上是关于Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等的主要内容,如果未能解决你的问题,请参考以下文章

实用正则表达式匹配和替换

实用正则表达式匹配和替换

使用正则表达式将属性替换为函数

如何替换 Javascript 中的正则表达式子字符串匹配?

JavaScript正则表达式--String.replace()变量替换的一点笔记

JavaScript 正则表达式Ⅰ