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

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

最初我有:

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

我试着用下面的词来代替:

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

然后简单地显示结果:

alert(str);

现在,它什么都不能做,所以我不知道该转向哪里。我尝试逆转一些现有的用破折号代替空格的方法,但是也不管用。

谢谢你的帮助。

128895 次浏览

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

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

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

MSDN Javascript 引用:-

方法之后,替换方法的结果是 stringObj 的副本 指定的替代品已经制作完成。

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

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

返回一个新字符串,原始字符串没有被修改

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

我发现 str.place ()的一个使用只能替换第一个连字符,所以我循环通过,而输入字符串仍然包含任何连字符,并替换所有连字符。

Http://jsfiddle.net/lgcyf/

这就解决了问题:

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

您的代码有两个问题:

  1. 首先,Place ()不改变字符串本身,它改变了字符串 报税表
  2. 其次,如果将一个字符串传递给 return 函数,它将只替换它遇到的第一个实例。这就是为什么我传递了一个带有 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 ? item.replace(/-/g, ''): item

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

然后,当字符串连接运行在经过筛选的元素上时,最终得到以下输出:

"This is a news item"

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

replaceAll()trim()结合使用可以满足您的需要。

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

如果它的数组像

 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']