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

javascript-将破折号(连字符)替换为空格,javascript,regex,Javascript,Regex,我已经寻找了一段时间了,虽然我发现了很多将空格改为破折号(连字符)的反应,但我没有发现任何相反的反应 最初我有: var str = "This-is-a-news-item-"; 我尝试将其替换为: str.replace("-", ' '); 并简单显示结果: alert(str); 现在,它没有任何作用,所以我不知道该转向哪里。我试着用破折号替换一些现有的空间,但这也不起作用 谢谢你的帮助。我认为你面临的问题几乎是:- str = str.replace("-", ' '); 您需

我已经寻找了一段时间了,虽然我发现了很多将空格改为破折号(连字符)的反应,但我没有发现任何相反的反应

最初我有:

var str = "This-is-a-news-item-";
我尝试将其替换为:

str.replace("-", ' ');
并简单显示结果:

alert(str);
现在,它没有任何作用,所以我不知道该转向哪里。我试着用破折号替换一些现有的空间,但这也不起作用


谢谢你的帮助。

我认为你面临的问题几乎是:-

str = str.replace("-", ' ');
您需要将替换结果重新分配给
str
,以查看反映的更改

发件人:-

替换方法的结果是在 已进行指定的替换

要替换所有的
-
,您需要使用带有regex参数的
/g
修饰符:-

str = str.replace(/-/g, ' ');
str = str.replace(/-/g, ' ');
replace()。你需要做什么

我发现str.replace()的一次使用只会替换第一个连字符,所以我在输入字符串仍然包含任何连字符时循环遍历,并将它们全部替换

这就解决了这个问题:

let str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);
您的代码有两个问题:

  • 首先,不更改字符串本身,它返回一个更改的字符串
  • 其次,如果将字符串传递给replace函数,它将只替换遇到的第一个实例。这就是为什么我用
    g
    标志传递了一个用于“global”的,这样所有实例都将被替换

  • 除了已经给出的答案之外,您可能还希望替换所有出现的问题。为此,需要一个正则表达式,如下所示:

    str = str.replace(/-/g, ' ');  // Replace all '-'  with ' '
    

    假设您以双破折号结束,并希望将其替换为单个字符,而不是替换字符的两倍。只需使用数组拆分、数组筛选和数组联接即可

    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?项目。替换(/-/g',):项目

    filter方法将删除这些额外的破折号,以便在筛选迭代中忽略该元素。上面的行还说明了item是否已经是空元素,以便不会在item.replace上崩溃

    然后,当字符串联接在筛选的元素上运行时,您将得到以下输出:

    "This is a news item"
    
    现在,如果您使用类似knockout.js的东西,您可以在其中进行计算机观察。您可以创建一个computed observable,以便在“str”更改时始终计算“newStr”,这样即使您更改了原始输入字符串的值,您也始终拥有一个没有破折号的字符串版本。基本上它们是结合在一起的。我相信其他JS框架也可以做类似的事情。

    与组合使用可能会满足您的需要

    conststr='-This-is-a-news-item-';
    
    log(str.replaceAll('-','.trim())字符串不可变,您必须重新分配结果。这将仅替换第一个实例。。。您需要使用“全局”正则表达式来更改所有实例。@Martijn。。是的,我在指出主要问题。OP也会发现这件事的。还是为了让您满意,我发布了直接的答案。抱歉,但现在它根本不起作用:您仍然在传递一个字符串,只是一个包含正则表达式模式的字符串。抛开双引号,你就很好了。@Martijn。。天哪。。谢谢:)很好!已删除我的
    -1
    :-)不管什么原因,这似乎也不起作用。。。如其他答案所述,这仅适用于第一种情况。您应该使用
    str=str.replace(/-/g')替换dash的所有实例。宾果,就是这样!非常感谢!
    
    "This is a news item"