[英]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.