[英]JavaScript String.Replace() not working
var formatChart = {
'[newline]' : '<br />',
'[tab]' : ' ',
'[space]' : ' '
};
// 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\\]' : ' ',
'\\[space\\]' : ' '
};
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.