用'+'替换字符串中的所有空格

Dav*_*Dev 317 javascript string

我有一个包含多个空格的字符串.我想用加号替换它们.我以为我可以用

var str = 'a b c';
var replaced = str.replace(' ', '+');
Run Code Online (Sandbox Code Playgroud)

但它只取代了第一次出现.如何让它替换所有出现的?

Dag*_*bit 471

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

var str = 'a b c';
var replaced = str.split(' ').join('+');
Run Code Online (Sandbox Code Playgroud)

  • 使用str = str.replace(/\s/g,"+"); (34认同)
  • 与reg表达式版本相比,此选择的解决方案在大型替换时速度较慢.使用3个解决方案进行测试:http://jsbin.com/isadi3/2 Firefox具有最小的时序差异,IE有明显的差异.因此,如果速度很重要并且您有大量的替换,那么reg exp就是您的选择. (23认同)
  • @JitendraPancholi取代了所有空格,而不仅仅是空格字符.另一个正则表达式的答案很好. (4认同)
  • @JitendraPancholi他想要替换*空格*,而不是"空格".在这种情况下,我假设*space*他只表示空格字符,而不仅仅是像`/ s`这样的旧空格.特别是因为他在JavaScript中这样做,用`+`字符替换空格字符(但不是其他空格)是编码URL的标准方法.这可能就是为什么仅替换空格字符的正则表达式解决方案具有替换所有空格的10倍的选票. (2认同)

Nic*_*ver 456

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

var replaced = str.replace(/ /g, '+');
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一下.与大多数其他语言不同,默认情况下,JavaScript仅替换第一次出现的语言.


epa*_*llo 88

var str = 'a b c';
var replaced = str.replace(/\s/g, '+');
Run Code Online (Sandbox Code Playgroud)

  • 比选择的解决方案更清洁,更快; 适用于`//g`没有的地方. (5认同)

Jit*_*oli 60

你也可以这样做

str = str.replace(/\s/g, "+");
Run Code Online (Sandbox Code Playgroud)

看看小提琴:http://jsfiddle.net/aC5ZW/

  • downvote的另一个可能原因是这个答案是[已发布](http://stackoverflow.com/a/3795130/451518)差不多四年前 (9认同)
  • @Jitendra Pancholi 非常感谢,你的回答确实帮助了我,因为我有一些日语 :) 空格,我无法用 .split(' ').join('+'); 替换它。你的回答对我有帮助。谢啦。 (2认同)

小智 25

在字符串中使用全局搜索.g标志

str.replace(/\s+/g, '+');
Run Code Online (Sandbox Code Playgroud)

source:replaceAll函数

  • 不起作用:[演示](https://jsbin.com/kocufiteva/edit?html,js,console,output) 输入:`"hello !!!"`,预期输出:`"hello++++!!!"` ,实际输出:`"hello+!!!"` (3认同)

Mar*_*ers 23

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

var replaced = str.replace(/ /g, '+');
Run Code Online (Sandbox Code Playgroud)

使用正则表达式与JavaScript和ActionScript:

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


sus*_*ani 9

您需要查找一些replaceAll选项

str = str.replace(/ /g, "+");
Run Code Online (Sandbox Code Playgroud)

这是执行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;

};
Run Code Online (Sandbox Code Playgroud)

  • 哇.呃...有一个**更简单的习惯用法:`str.split(stringToFind).join(stringToReplace)`. (2认同)
  • @Casper你看到了什么浏览器?http://jsbin.com/isadi3/edit查看代码看起来很慢.只是为了踢,我编写了一个快速测试,它在我测试它的浏览器中慢了100倍. (2认同)

Mot*_*etr 6

不破坏空间问题

在某些浏览器中

(MSIE"通常";-))

替换字符串中的空格会忽略不间断的空格(160字符代码).

一个人应该总是这样替换:

myString.replace(/[ \u00A0]/, myReplaceString)
Run Code Online (Sandbox Code Playgroud)

很好的详细解释:

http://www.adamkoch.com/2009/07/25/white-space-and-character-160/