有没有办法使用 JavaScript 将每个“% 20”替换为一个空格。我知道如何用空格替换单个“% 20”,但是如何替换所有这些空格?
var str = "Passwords%20do%20not%20match"; var replaced = str.replace("%20", " "); // "Passwords do%20not%20match"
在 regexp 中使用 global标志:
global
var replaced = str.replace(/%20/g, " "); ^
看看这个: 如何在 JavaScript 中替换字符串的所有匹配项?
简短的回答:
str.replace(/%20/g, " ");
编辑: 在这种情况下,您还可以执行以下操作:
decodeURI(str)
百分比 %符号后跟两个十六进制数字 (UTF-8字符表示)通常表示已被编码为 URI的一部分的字符串。这样可以确保原本具有特殊意义的字符不会受到干扰。在你的案例中,%20立即被识别为一个空白字符——虽然它在 URI中没有任何意义,但它被编码以避免将字符串分成多个“部分”。
%
%20
别误会,正则表达式是炸弹!然而,任何值得关注的网络技术将已经有工具在它的库处理这样的 标准为您。为什么要重新发明轮子?
var str = 'xPasswords%20do%20not%20match'; console.log( decodeURI(str) ); // "xPasswords do not match"
Javascript 同时具有 decodeURI和 decodeURIComponent,它们与 encodeURI和 encodeURIComponent的对应物略有不同——您应该熟悉文档。
decodeURI
decodeURIComponent
encodeURI
encodeURIComponent
如果你想使用 jQuery,你可以使用 .replaceAll()
.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)
unescape(stringValue)
var str = "Passwords%20do%20not%20match%21"; document.write(unescape(str))
//Output Passwords do not match!
使用 decodeURI(stringValue)
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))
它是这样工作的:
在 Mozilla 的文档[ https://developer.Mozilla.org/en-us/docs/web/javascript/reference/global_objects/decodeuri ]中有一个很好的例子
Edit: decdeURIComponent 工作得更好,请看示例。