帮助正则表达式(JS替换方法)

时间:2010-10-24 12:21:12

标签: javascript replace expression

我们想在我们的字符串中进行替换,如下所示: - 每次出现\ n(新行)或\ t(制表符)或\ r(回车符)时,应将其替换为字符串“\ n”或“\ t”或“\ r”。

例如,这个字符串:
“你好,怎么样  你呢? 非常感谢。“

应替换为:
“你好,你好吗?\ n非常感谢。”

你能帮助我们吗?我们在Jscript(replace()方法)中尝试使用此代码,但它不起作用:

myString.replace(/([\n|\t])/g, "\\$1");

谢谢!

4 个答案:

答案 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");