【问题标题】:Prevent replacing \n in JavaScript when using String.replace()使用 String.replace() 时防止在 JavaScript 中替换 \n
【发布时间】:2021-03-18 22:08:50
【问题描述】:
问题在于 .replace 方法的行为异常。
我有一个带有特殊字符的大字符串变量,所以我给你看一个小例子:
let str = "a \n b \/\ c";
str.replace('a','z');
console.log(str)
// expecting str: "z \n b \/\ c"
// but the result str is :
// "z
// b / c"
如何替换某些字符并防止修改其他特殊字符?
为了您的信息,我有一个大的 JS 文件(代码),我需要替换一些变量,所以我将代码放在 `` 之间并创建一个字符串并使用 string.replace() 以获得所需的结果。
但是结果会删除所有的\n和/\等特殊字符。
【问题讨论】:
标签:
javascript
string
ecmascript-6
replace
【解决方案1】:
您可以将String.raw 与模板文字一起使用,以便其中的所有字符完全按字面意思解释:
let str = String.raw`a \n b \/\ c`;
console.log(str.replace('a','z'));
但是,如果您只是将纯代码粘贴到 JS 中,则使用此方法也必须转义反引号。
更好的方法是提供输入代码的接口,这样就不用自己处理转义问题了:
const textarea = document.querySelector('textarea');
textarea.onchange = () => {
console.log(textarea.value.replace('a', 'z'));
};
<textarea>a \n b \/\ c</textarea>
另一种选择是将要更改的原始 JS 代码放入 <script> 标记中:
const str = document.querySelector('script[type="to-be-replaced"]').textContent;
console.log(str.replace('a','z'));
<script type="to-be-replaced">a \n b \/\ c</script>