Javascript 将所有“% 20”替换为一个空格

有没有办法使用 JavaScript 将每个“% 20”替换为一个空格。我知道如何用空格替换单个“% 20”,但是如何替换所有这些空格?

var str = "Passwords%20do%20not%20match";
var replaced = str.replace("%20", " "); // "Passwords do%20not%20match"
159961 次浏览

在 regexp 中使用 global标志:

var replaced = str.replace(/%20/g, " ");
^

看看这个: 如何在 JavaScript 中替换字符串的所有匹配项?

简短的回答:

str.replace(/%20/g, " ");

编辑: 在这种情况下,您还可以执行以下操作:

decodeURI(str)

百分比 %符号后跟两个十六进制数字 (UTF-8字符表示)通常表示已被编码为 URI的一部分的字符串。这样可以确保原本具有特殊意义的字符不会受到干扰。在你的案例中,%20立即被识别为一个空白字符——虽然它在 URI中没有任何意义,但它被编码以避免将字符串分成多个“部分”。

别误会,正则表达式是炸弹!然而,任何值得关注的网络技术将已经有工具在它的库处理这样的 标准为您。为什么要重新发明轮子?

var str = 'xPasswords%20do%20not%20match';
console.log( decodeURI(str) ); // "xPasswords do not match"

Javascript 同时具有 decodeURIdecodeURIComponent,它们与 encodeURIencodeURIComponent的对应物略有不同——您应该熟悉文档。

如果你想使用 jQuery,你可以使用 .replaceAll()

如果你需要删除末尾的空白,那么这里有一个解决方案: Https://www.geeksforgeeks.org/urlify-given-string-replace-spaces/

const stringQ1 = (string)=>{
//remove white space at the end
const arrString = string.split("")
for(let i = arrString.length -1 ; i>=0 ; i--){
let char = arrString[i];
    

if(char.indexOf(" ") >=0){
arrString.splice(i,1)
}else{
break;
}
}


let start =0;
let end = arrString.length -1;
  



//add %20
while(start < end){
if(arrString[start].indexOf(' ') >=0){
arrString[start] ="%20"
      

}
    

start++;
}
  

return arrString.join('');
}


console.log(stringQ1("Mr John Smith   "))

使用 unescape(stringValue)

var str = "Passwords%20do%20not%20match%21";
document.write(unescape(str))

//Output
Passwords do not match!

使用 decodeURI(stringValue)

var str = "Passwords%20do%20not%20match%21";
document.write(decodeURI(str))

Space = %20
? = %3F
! = %21
# = %23
...etc

这个方法使用了 decdeURI组件() (见下文编辑)方法,这是最好的方法。

var str = "Passwords%20do%20not%20match%21";
alert(decodeURIComponent(str))

它是这样工作的:

Space = %20
? = %3F
! = %21
# = %23
...etc

在 Mozilla 的文档[ https://developer.Mozilla.org/en-us/docs/web/javascript/reference/global_objects/decodeuri ]中有一个很好的例子

Edit: decdeURIComponent 工作得更好,请看示例。