Javascript 将字符串中的所有空格替换为'+';

Javascript 将字符串中的所有空格替换为'+';,javascript,string,Javascript,String,我有一个包含多个空格的字符串。我想用加号替换这些。我想我可以用 var str = 'a b c'; var replaced = str.replace(' ', '+'); 但它只会取代第一次出现。如何使其替换所有事件?您需要/g(全局)选项,如下所示: var replaced = str.replace(/ /g, '+'); myString.replace(/[ \u00A0]/, myReplaceString) 。与大多数其他语言不同,默认情况下,JavaScript只替换

我有一个包含多个空格的字符串。我想用加号替换这些。我想我可以用

var str = 'a b c';
var replaced = str.replace(' ', '+');

但它只会取代第一次出现。如何使其替换所有事件?

您需要
/g
(全局)选项,如下所示:

var replaced = str.replace(/ /g, '+');
myString.replace(/[ \u00A0]/, myReplaceString)

。与大多数其他语言不同,默认情况下,JavaScript只替换第一次出现的内容。

使用带有
g
修饰符的正则表达式:

var replaced = str.replace(/ /g, '+');
发件人:

/g启用“全局”匹配。使用replace()方法时,指定此修饰符以替换所有匹配项,而不是仅替换第一个匹配项


您需要寻找一些替换所有选项

str = str.replace(/ /g, "+");
这是执行replaceAll的正则表达式方法

function ReplaceAll(Source, stringToFind, stringToReplace) {
    var temp = Source;
    var index = temp.indexOf(stringToFind);

    while (index != -1) {
        temp = temp.replace(stringToFind, stringToReplace);
        index = temp.indexOf(stringToFind);
    }

    return temp;
}

String.prototype.ReplaceAll = function (stringToFind, stringToReplace) {
    var temp = this;
    var index = temp.indexOf(stringToFind);

    while (index != -1) {
        temp = temp.replace(stringToFind, stringToReplace);
        index = temp.indexOf(stringToFind);
    }

    return temp;

};

这里有一个不需要正则表达式的替代方案:

var str = 'a b c';
var replaced = str.split(' ').join('+');
以递归方式执行此操作:

public String replaceSpace(String s){
    if (s.length() < 2) {
        if(s.equals(" "))
            return "+";
        else
            return s;
    }
    if (s.charAt(0) == ' ')
        return "+" + replaceSpace(s.substring(1));
    else
        return s.substring(0, 1) + replaceSpace(s.substring(1));
}
公共字符串替换空间(字符串s){
如果(s.长度()<2){
如果(s.等于(“”)
返回“+”;
其他的
返回s;
}
如果(s.charAt(0)='')
返回“+”+replaceSpace(s.substring(1));
其他的
返回s.substring(0,1)+replaceSpace(s.substring(1));
}

在字符串中使用全局搜索。g旗

str.replace(/\s+/g, '+');
来源:

非中断空间问题 在某些浏览器中

(MSIE“一如既往”;-)

替换字符串中的空格将忽略非中断空格(160字符代码)

人们应该总是这样替换:

var replaced = str.replace(/ /g, '+');
myString.replace(/[ \u00A0]/, myReplaceString)
非常详细的解释:


您也可以这样做:

str = str.replace(/\s/g, "+");


看看这个。

您正在尝试对字符串进行URL编码吗?如果是这样的话,最好寻求帮助,而不仅仅是如何处理空格。@Lasse,我想这就是我最终要做的,因为我想要格式化的字符串最终将成为URL的一部分。然而,我认为这个问题仍然存在,因为替换字符串中所有出现的子字符串并不是很明显。对,这也是我的怀疑。答案是:使用
encodeURIComponent()
。不要试图用字符串替换自己破解它;这比你想象的要复杂得多。这将把空格编码为
%20
,而不是
+
<代码>%20同样有效(事实上更有效,因为它在路径组件中工作,而
+
只意味着查询组件中有一个空格),但是如果您希望它看起来稍微漂亮一点,您当然可以在之后执行
替换(/%20/g,“+”)
。您可能会尝试使用
escape()
,因为它确实使用了
+
,但它也会错误地避免所有非ASCII字符。我同意这一点,这个问题本身就有好处:)我只是想知道,如果这就是您试图结束的地方,可能会有更好的解决方案。但是是的,这个问题本身是好的,毫无疑问。我知道足够多的javascript,可以勉强应付。替换并没有替换所有发生的事情对我来说都是新闻。比较小字符串和长字符串上的regex和split/join。哇!呃。。。有一个更简单的习惯用法:
str.split(stringToFind).join(stringToReplace)
。哇,效率太低了。@epascarello实际上比正则表达式或更高的indfedelity执行得快:)@Casper你在什么浏览器中看到了这一点?看看代码,它看起来很慢。只是为了好玩,我编写了一个快速测试,在我测试它的浏览器中速度慢了100倍。与reg expression版本相比,这个选择的解决方案在大型替换上慢了100倍。用发布的3个解决方案进行测试:Firefox的时间差最小,IE的时间差明显。因此,如果速度很重要,并且您有大量替换,那么reg exp就是一种方法@JitendraPancholi,替换所有空格,而不仅仅是空格字符。这里的另一个正则表达式答案很好。@JitendraPancholi他想替换空格,而不是“空格”。在本文中,我假设他用空格表示的是空格字符,而不是像
/s
这样的旧空格。特别是因为他是用JavaScript编写的,用
+
字符替换空格字符(而不是其他空格)是编码URL的标准方法。这可能就是为什么只替换空格字符的正则表达式解决方案的投票数是替换所有空格的正则表达式解决方案的10倍。如果您的项目使用的URL中包含30个空格,你有比微优化字符串替换更重要的事情要担心。你能解释一下为什么这是解决这个问题的好办法吗?不是我的反对票,因为内容太长,我有一个审查任务要检查。我认为要求更高的人没有看到解释,并且在没有评论的情况下投了反对票。请把你们的评论写进我的答案中。好吧,我在我的答案中添加了小提琴。另一个可能的原因是,这个答案将近四年了ago@JitendraPancholi非常感谢,您的回答确实帮助了我,因为我有一些日语:)空格,我不能用.split(“”).join(‘+’)替换;你的回答确实帮助了我。谢谢,伙计。比选择的解决方案更干净、更快;适用于
//g
不适用的情况。这里的答案中已经提供了更好的解决方案。这比拆分/加入版本具有更好的可读性。imhoI已经测试了答案上方的许多正则表达式,但您的答案是最正确的,因为它还替换了多个链接空格。不起作用:输入:
“hello!!!”
,预期输出:
“hello++++!!!”
,实际输出:
“hello++!!!”