66

我一直在寻找这个,虽然我发现了许多将空格更改为破折号(连字符)的响应,但我还没有找到任何相反的方向。

最初我有:

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

我尝试将其替换为:

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

并简单地显示结果:

alert(str);

现在,它什么也没做,所以我不知道该转向哪里。我尝试颠倒一些现有的用破折号替换空格的方法,但这也不起作用。

谢谢您的帮助。

4

8 回答 8

168

这修复了它:

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

您的代码有两个问题:

  1. 首先,String.replace()不改变字符串本身,它返回一个改变的字符串。
  2. 其次,如果你将一个字符串传递给 replace 函数,它只会替换它遇到的第一个实例。这就是为什么我传递了一个带有标志的正则表达式g,用于“全局”,以便所有实例都将被替换。
于 2013-01-10T16:41:43.383 回答
8

replace()返回一个新字符串,并且不修改原始字符串。你需要做

str = str.replace(/-/g, ' ');
于 2013-01-10T16:38:26.353 回答
6

我认为您面临的问题几乎是这样的:-

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

您需要将替换结果重新分配给str,以查看反映的更改。

来自MSDN Javascript 参考:-

replace 方法的结果是指定替换完成后的 stringObj 副本。

要替换所有-,您需要使用/g带有正则表达式参数的修饰符:-

str = str.replace(/-/g, ' ');
于 2013-01-10T16:37:38.677 回答
2
var str = "This-is-a-news-item-";
while (str.contains("-")) {
  str = str.replace("-", ' ');
}
alert(str);

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

http://jsfiddle.net/LGCYF/

于 2013-01-10T16:40:30.980 回答
2

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

str = str.replace(/-/g, ' ');  // Replace all '-'  with ' '
于 2013-01-10T16:42:06.863 回答
1

replaceAll()结合使用trim()可能会满足您的需求。

const str = '-This-is-a-news-item-';
console.log(str.replaceAll('-', ' ').trim());

于 2021-03-19T07:53:03.653 回答
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"

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

于 2019-07-09T19:43:04.497 回答
0

如果它的数组像

 arr = ["This-is-one","This-is-two","This-is-three"];
    arr.forEach((sing,index) => {
      arr[index] = sing.split("-").join(" ")
      });

输出将是

['This is one', 'This is two', 'This is three']
于 2022-01-26T07:19:15.227 回答