我一直在寻找这个问题,虽然我已经找到了许多将空格变成破折号(连字符)的答案,但我还没有找到任何相反的方向。
最初我有:
var str = "This-is-a-news-item-";
我尝试将其替换为:
str.replace("-", ' ');
只需显示结果:
alert(str);
现在,它没有做任何事情,所以我不知道该转向何方。我试图扭转一些用破折号取代空间的现有产品,这也不起作用。
感谢您的帮助。
答案 0 :(得分:110)
这解决了它:
var str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);
您的代码存在两个问题:
g
标志为'global'的原因,以便所有实例都被替换。答案 1 :(得分:4)
我认为您面临的问题几乎是这样: -
str = str.replace("-", ' ');
您需要将替换结果重新分配到str
,以查看反映的更改。
来自MSDN Javascript reference: -
replace方法的结果是stringObj之后的副本 指定的替换已经完成。
要替换所有-
,您需要将/g
修饰符与regex参数一起使用: -
str = str.replace(/-/g, ' ');
答案 2 :(得分:4)
replace()
返回一个新字符串,并且不修改原始字符串。你需要做
str = str.replace(/-/g, ' ');
答案 3 :(得分:1)
var str = "This-is-a-news-item-";
while (str.contains("-")) {
str = str.replace("-", ' ');
}
alert(str);
我发现str.replace()的一个用法只会替换第一个连字符,所以我在输入字符串仍包含任何连字符时循环播放,并将它们全部替换掉。
答案 4 :(得分:1)
除了已经给出的答案,您可能想要替换所有出现的事件。为此,您需要一个正则表达式,如下所示:
str = str.replace(/-/g, ' '); // Replace all '-' with ' '
答案 5 :(得分:0)
想象一下,您最终使用双破折号,并且想要用单个字符而不是替换字符的双倍字符来代替它们。您可以只使用数组拆分,数组过滤器和数组联接。
var str = "This-is---a--news-----item----";
然后将所有破折号替换为单个空格,您可以执行以下操作:
var newStr = str.split('-').filter(function(item) {
item = item ? item.replace(/-/g, ''): item
return item;
}).join(' ');
现在,如果字符串包含双破折号,例如'----',则数组拆分将在其中生成3个破折号的元素(因为它在第一个破折号处进行了拆分)。因此,使用此行:
item = item ? item.replace(/-/g, ''): item
filter方法会删除这些多余的破折号,因此在迭代过滤时将忽略该元素。上一行还说明了item是否已经是一个空元素,因此它不会在item.replace上崩溃。
然后,当您的字符串连接在已过滤的元素上运行时,您将得到以下输出:
"This is a news item"
现在,如果您使用的是类似敲门声(.snockout.js)的东西,则可以在其中观察计算机。您可以创建一个可计算的可观察值,以便在“ str”更改时始终计算“ newStr”,因此即使更改原始输入字符串的值,您也将始终具有不带破折号的字符串版本。基本上它们是绑定在一起的。我确信其他JS框架也可以做类似的事情。
答案 6 :(得分:0)
将 replaceAll()
与 trim()
结合使用可能会满足您的需求。
const str = '-This-is-a-news-item-';
console.log(str.replaceAll('-', ' ').trim());