2013-01-10 65 views
23

我一直在寻找这一段时间,虽然我找到了很多将空格变成短划线(连字符)的响应,但我还没有发现任何内容其他方向。JavaScript - 用空格替换破折号(连字符)

起初我:

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

我尝试取代它:

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

,简单地显示结果:

alert(str); 

现在,它不会做任何事情,所以我不知道该去哪里转。我试图扭转一些现有的用短划线替换空间的方法,但这也行不通。

感谢您的帮助。

+4

字符串是不可变的,你要重新分配的结果。 –

回答

69

此修复它:

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

有两个问题与您的代码:

  1. 首先,String.replace()不改变字符串本身,它回报一改变字符串。其次,如果将字符串传递给替换函数,它将只替换它遇到的第一个实例。这就是为什么我通过与g标志为'全球',以便所有实例将被替换。
+0

演示在这里:http://jsfiddle.net/vor0nwe/3EuZb/1/ – Martijn

+0

宾果,原来如此!非常感谢! – CMIVXX

4

我认为你所面对的问题几乎是这样的: -

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

您需要更换的结果重新分配给str,看到反射的变化。

MSDN Javascript reference: -

的替代方法的结果是的stringObj副本 指定故已被替代之后。

全部更换为-,你将需要使用/g修饰符正则表达式参数: -

str = str.replace(/-/g, ' '); 
+0

这只会替换第一个实例...您需要使用“全局”正则表达式来更改所有实例。 – Martijn

+0

@Martijn ..是的,我指出了主要问题。 OP在得到这个工作之后也会发现这个东西。为了您的满意,我已经发布了直接的答案。 –

+0

对不起,但现在根本不起作用:你仍然在传递一个字符串,只是一个包含_pattern for_正则表达式的字符串。抛开双引号,你很好。 – Martijn

3

replace()返回一个新的字符串,而原始字符串不会被修改。你需要做的

str = str.replace(/-/g, ' '); 
+0

这不工作,要么出于某种原因... [看小提琴链接](http://jsfiddle.net/cmivxx/3EuZb/) – CMIVXX

+0

在其他的答案指出,第这只工程实例。你应该使用'str = str.replace(/ -/g,'');'来替换短划线的所有实例。 – iagreen

0
var str = "This-is-a-news-item-"; 
while (str.contains("-")) { 
    str = str.replace("-", ' '); 
} 
alert(str); 

我发现一个使用str.replace的()将只替换第一个连字符,所以我循环通而输入字符串仍然包含任何连字符,并取代它们。

http://jsfiddle.net/LGCYF/

0

除了答案已经给出,你可能要替换所有出现。要做到这一点,你需要一个正则表达式如下:

str = str.replace(/-/g, ' '); // Replace all '-' with ' ' 
相关问题