繁体   English   中英

JavaScript String.Replace() 不工作

[英]JavaScript String.Replace() not working

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 等价物替换所有出现的“特殊”字符([换行符]等)。 但它不起作用。

为什么?

注意,在 javascript 中替换为正则表达式。 这不是你想要做的。 通常的做法是使用组合的连接和拆分功能。

另外,您正在测试被替换的字符串是否首先存在 (formatChart[k]),但您想测试替换的 (k) 是否在该字符串中。

这是一个示例代码:

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

    return str;
}

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

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

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

而不是这个:

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

尝试这个:

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

你的 function 有一个小错误。 代替

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

经过

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

并查看结果

这是一个略有不同的正则表达式版本。 这会转义要替换的内容中的正则表达式字符,因此我们可以使用正则表达式替换 function 的全局替换。 您需要在括号前使用双反斜杠,以便在作为正则表达式传递时留下反斜杠。

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/

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM