我一直在寻找这个,虽然我发现了许多将空格更改为破折号(连字符)的响应,但我还没有找到任何相反的方向。
最初我有:
var str = "This-is-a-news-item-";
我尝试将其替换为:
str.replace("-", ' ');
并简单地显示结果:
alert(str);
现在,它什么也没做,所以我不知道该转向哪里。我尝试颠倒一些现有的用破折号替换空格的方法,但这也不起作用。
谢谢您的帮助。
我一直在寻找这个,虽然我发现了许多将空格更改为破折号(连字符)的响应,但我还没有找到任何相反的方向。
最初我有:
var str = "This-is-a-news-item-";
我尝试将其替换为:
str.replace("-", ' ');
并简单地显示结果:
alert(str);
现在,它什么也没做,所以我不知道该转向哪里。我尝试颠倒一些现有的用破折号替换空格的方法,但这也不起作用。
谢谢您的帮助。
这修复了它:
let str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);
您的代码有两个问题:
g
,用于“全局”,以便所有实例都将被替换。replace()
返回一个新字符串,并且不修改原始字符串。你需要做
str = str.replace(/-/g, ' ');
我认为您面临的问题几乎是这样的:-
str = str.replace("-", ' ');
您需要将替换结果重新分配给str
,以查看反映的更改。
replace 方法的结果是指定替换完成后的 stringObj 副本。
要替换所有-
,您需要使用/g
带有正则表达式参数的修饰符:-
str = str.replace(/-/g, ' ');
var str = "This-is-a-news-item-";
while (str.contains("-")) {
str = str.replace("-", ' ');
}
alert(str);
我发现 str.replace() 的一次使用只会替换第一个连字符,所以我在输入字符串仍然包含任何连字符时循环,并将它们全部替换。
除了已经给出的答案之外,您可能还想替换所有出现的地方。为此,您需要一个正则表达式,如下所示:
str = str.replace(/-/g, ' '); // Replace all '-' with ' '
replaceAll()
结合使用trim()
可能会满足您的需求。
const str = '-This-is-a-news-item-';
console.log(str.replaceAll('-', ' ').trim());
想象一下,您以双破折号结束,并希望用单个字符而不是替换字符的双倍替换它们。您可以只使用数组拆分和数组过滤器和数组连接。
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 框架可以做类似的事情。
如果它的数组像
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']