javascript - 用空格替换破折号(连字符)

时间:2013-01-10 16:36:18

标签: javascript regex

我一直在寻找这个问题,虽然我已经找到了许多将空格变成破折号(连字符)的答案,但我还没有找到任何相反的方向。

最初我有:

var str = "This-is-a-news-item-";

我尝试将其替换为:

str.replace("-", ' ');

只需显示结果:

alert(str);

现在,它没有做任何事情,所以我不知道该转向何方。我试图扭转一些用破折号取代空间的现有产品,这也不起作用。

感谢您的帮助。

7 个答案:

答案 0 :(得分:110)

这解决了它:

var str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);

您的代码存在两个问题:

  1. 首先,String.replace()不会更改字符串本身,会返回更改的字符串。
  2. 其次,如果将字符串传递给replace函数,它只会替换它遇到的第一个实例。这就是为什么我传递regular expression 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()的一个用法只会替换第一个连字符,所以我在输入字符串仍包含任何连字符时循环播放,并将它们全部替换掉​​。

http://jsfiddle.net/LGCYF/

答案 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());