我有一个包含多个空格的字符串,我想用加号符号替换它们。我以为我可以使用
var str = 'a b c';
var replaced = str.replace(' ', '+');
但它只替换第一次出现的。我该如何使它替换所有出现的地方?
我有一个包含多个空格的字符串,我想用加号符号替换它们。我以为我可以使用
var str = 'a b c';
var replaced = str.replace(' ', '+');
但它只替换第一次出现的。我该如何使它替换所有出现的地方?
/g
(全局)选项,像这样:var replaced = str.replace(/ /g, '+');
你可以在这里尝试一下。与大多数其他语言不同,JavaScript 默认只替换第一个匹配项。
这里有一种不需要正则表达式的替代方案:
var str = 'a b c';
var replaced = str.split(' ').join('+');
/s
一样的任何旧的空白字符。特别是因为他是在JavaScript中进行操作,将空格字符(但不是其他空白字符)替换为“+”字符是一种标准的URL编码方式。这可能就是为什么只替换空格字符的正则表达式解决方案比替换所有空白字符的解决方案拥有10倍的投票数的原因。 - Dagg Nabbitvar str = 'a b c';
var replaced = str.replace(/\s/g, '+');
使用带有 g
修饰符的正则表达式:
var replaced = str.replace(/ /g, '+');
来自使用JavaScript和ActionScript的正则表达式:
/g启用“全局”匹配。在使用replace()方法时,指定此修饰符以替换所有匹配项,而不仅仅是第一个。
您需要寻找一些replaceAll选项。
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;
};
str.split(stringToFind).join(stringToReplace)
。 - bobince在某些浏览器中(通常是 MSIE),替换字符串中的空格会忽略非间断空格(160 字符代码)。
应该始终像这样替换:
myString.replace(/[ \u00A0]/, myReplaceString)
递归地执行此操作:
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));
}
encodeURIComponent()
。不要尝试使用字符串替换来自己实现编码,这比你想象的要棘手得多。这将把空格编码为%20
而不是+
。%20
同样有效(实际上更有效,因为它适用于路径组件,而+
仅在查询组件中表示空格),但如果你想让它看起来更漂亮,当然可以之后做一个replace(/%20/g, '+')
。你可能会想使用escape()
,因为它使用+
,但它也会错误地处理所有非 ASCII 字符 —— 需要避免。 - bobince