我一直在寻找这一点,虽然我已经找到了许多将空格改为破折号(连字符)的响应,但我还没有找到任何相反方向的响应。
最初我有:
var str = "This-is-a-news-item-";
我试着用下面的词来代替:
str.replace("-", ' ');
然后简单地显示结果:
alert(str);
现在,它什么都不能做,所以我不知道该转向哪里。我尝试逆转一些现有的用破折号代替空格的方法,但是也不管用。
谢谢你的帮助。
我认为你面临的问题几乎是这样的:-
str = str.replace("-", ' ');
您需要将替换的结果重新分配给 str,以查看所反映的更改。
str
从 MSDN Javascript 引用:-
方法之后,替换方法的结果是 stringObj 的副本 指定的替代品已经制作完成。
要替换所有的 -,您需要使用带有 regex 参数的 /g修饰符:-
-
/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);
您的代码有两个问题:
g
除了已经给出的答案之外,您可能还想替换所有出现的情况。为此,您需要一个如下的正则表达式:
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()结合使用可以满足您的需要。
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']