【问题标题】: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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 2011-05-20
    • 2018-06-26
    • 2012-11-10
    • 2015-08-05
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多