JavaScript String.Replace()不起作用

时间:2011-07-13 18:54:56

标签: javascript

var formatChart = {
    '[newline]' : '<br />', 
    '[tab]' : '&nbsp;&nbsp;&nbsp;&nbsp;', 
    '[space]' : '&nbsp;'
}; 


// Formats a string according to the formatting chart
var formatString = function(string)
{
    for (var k in formatChart)
    {
        while (string.indexOf(formatChart[k]) != -1)
            string = string.replace(k, this.formatChart[k]); 
    }
    return string; 
}; 

var str = "Hello[newline]World[tab]Tab[space]Hello[newline]Done"; 
alert(formatString(str)); 

上面的代码应该用它们的HTML等价替换所有出现的“特殊”字符([换行符]等)。但它不起作用。

为什么呢?

8 个答案:

答案 0 :(得分:4)

小心,在javascript中使用正则表达式替换。这不是你想要做的。通常的方法是使用组合连接和拆分函数。

另外,您正在测试替换的字符串是否存在于第一位(formatChart [k]),但您想测试replacee(k)是否在该字符串中。

这是一个示例代码:

function formatString(str) {
    for (var k in formatChart) {
        str = str.split(k).join(formatChart[k]);
    }

    return str;
}

答案 1 :(得分:2)

您正在搜索字符串以查找结果值,而不是键。试试这个:

var formatString = function(str)
{
    for (var k in formatChart)
    {
        while (str.indexOf(k) != -1)
            str = str.replace(k, formatChart[k]); 
    }
    return str; 
}; 

答案 2 :(得分:1)

string.indexOf(formatChart[k]) != -1错了。当迭代一个Object(你实际上不应该这样做)时,k值就是Key。你想要string.indexOf(k) != -1

答案 3 :(得分:1)

而不是:

while (string.indexOf(formatChart[k]) != -1)

试试这个:

while (string.indexOf(k) != -1)

答案 4 :(得分:1)

你的功能有一个小错误。取代

while (string.indexOf(formatChart[k]) != -1)

通过

while (string.indexOf(k) != -1)

并查看结果

答案 5 :(得分:1)

这是一个略有不同的正则表达式版本。这会在要替换的东西中逃避正则表达式字符,因此我们可以使用全局替换正则表达式替换函数。你需要在括号前面加上双反斜杠,以便在作为正则表达式传递时留下反斜杠。

var formatChart = {
    '\\[newline\\]' : '<br />', 
    '\\[tab\\]' : '&nbsp;&nbsp;&nbsp;&nbsp;', 
    '\\[space\\]' : '&nbsp;'
};

var str = "Hello[newline]World[tab]Tab[space]Hello[newline]Done";  

function formatString(str) {
    for (var i in formatChart) {
        str = str.replace(new RegExp(i, "gi"), formatChart[i]);
    }
    return(str);
}

您可以在此处看到它:http://jsfiddle.net/jfriend00/pj2Kr/

答案 6 :(得分:0)

不正确:while (string.indexOf(formatChart[k]) != -1)

正确:while (string.indexOf(k) != -1)

答案 7 :(得分:0)

这是使用正则表达式的小提琴:http://jsfiddle.net/msTuC/