簡體   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