我们想在我们的字符串中进行替换,如下所示: - 每次出现\ n(新行)或\ t(制表符)或\ r(回车符)时,应将其替换为字符串“\ n”或“\ t”或“\ r”。
例如,这个字符串:
“你好,怎么样
你呢?
非常感谢。“
应替换为:
“你好,你好吗?\ n非常感谢。”
myString.replace(/([\n|\t])/g, "\\$1");
谢谢!
答案 0 :(得分:1)
我不确定一种简单的方法可以将你正在做的事情结合起来,但是长期工作会有效:
myString.replace(/\n/g, "\\n").replace(/\t/g, "\\t");
或者,您可以使用函数在单个传递中执行此操作,如下所示:
myString.replace(/([\n|\t])/g, function(a, m) { return m=="\n"?"\\n":"\\t"; });
答案 1 :(得分:1)
\\$1
将是换行符,后跟换行符或制表符。 (顺便说一句,[\n|\t]
也没有按照你的想法行事。字符组不需要|
。)
如果要映射字符串转义,可以使用显式RegExp
构造函数来执行此操作:
var escapes= ['n', 't'];
for (var i= escapes.length; i-->0;)
s= s.replace(new RegExp('\\'+escapes[i], 'g'), '\\'+escapes[i]);
虽然仅仅两次逃脱可能不值得。但是其他控制角色呢?反斜杠本身呢?
如果您尝试从字符串中创建JavaScript字符串文字,则JSON.stringify
可以更好地启动。
答案 2 :(得分:0)
我会使用一个对象将字符与转义序列相关联,如下所示:
var map = {"\b":"\\b", "\t":"\\t", "\n":"\\n", "\v":"\\v", "\f":"\\f", "\r":"\\r"};
str = str.replace(/[\b\t\n\v\f\r]/g, function(val) { return map[val]; });
答案 3 :(得分:0)
3个解决方案:
var str = "";
for(var i=0;i<5000;i++){
str += "\t\n";
}
function replaceType( s ){
switch( s ){
case "\n":
return "\\n";
break;
case "\t":
return "\\t";
break;
default:
return s;
}
}
//slow solution
console.time("replace function");
str.replace(/([\n|\t])/g, replaceType);
console.timeEnd("replace function");
//fast solution
console.time("chained replace");
str.replace(/\t/g, "\\t").replace(/\n/g, "\\n");
console.timeEnd("chained replace");
//slightly slower than chained
var replaceChars = { "\\t": /\t/g, "\\n": /\n/g };
var out = str;
console.time("looped chained replace");
for(re in replaceChars){
out = out.replace(replaceChars[re], re);
}
console.timeEnd("looped chained replace");