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等价替换所有出现的“特殊”字符([换行符]等)。但它不起作用。
为什么呢?
答案 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\\]' : ' ',
'\\[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/
答案 6 :(得分:0)
不正确:while (string.indexOf(formatChart[k]) != -1)
正确:while (string.indexOf(k) != -1)
答案 7 :(得分:0)
这是使用正则表达式的小提琴:http://jsfiddle.net/msTuC/