我无法找到一个与我想要的相似的例子,即替换:
%with%25
&安培;与%26
/ with%2F
#with%23
“有空间
\ with space
作为参考我正在使用GWT和String.replaceAll,但我问的是Javascript,因为无论如何它都被翻译成了。我知道(组件)URI编码,但它不是我想要的,我只需要这些字符。
稍后编辑:我正在寻找一种方法来实现一两个正则表达式,现在它已经完成了:
splits[i].replaceAll("%", "%25").replaceAll("&", "%26").replaceAll("/","%2F").replaceAll("#", "%23").replaceAll("\"", "").replaceAll("\\\\", " ");
但这对我来说似乎很难看。
答案 0 :(得分:8)
(这适用于JavaScript,这是您所询问的语言。请注意,它在Java中会有很大不同。)
在JavaScript中,使用带有正则表达式的replace
和passing in a function这是微不足道的:
var str = "testing % & / # \" \\";
var result = str.replace(/[%&\/#"\\]/g, function(m) {
return (m === '"' || m === '\\') ? " " : "%" + m.charCodeAt(0).toString(16);
});
如果你不介意扫描字符串两次而不是一次,它可以看起来更简单位(虽然还不够,我觉得值得):
var str = "testing % & / # \" \\";
var result = str.replace(/["\\]/g, " ").replace(/[%&\/#]/g, function(m) {
return "%" + m.charCodeAt(0).toString(16);
});
...因为我们可以单独执行"
和\
替换,并且不用检查我们匹配的内容。 Live example | source
答案 1 :(得分:0)
String.replace(/%/, '%25').replace(/&/, '%26').replace(/\//, '%2F').replace(/#/, '%23').replace(/"/, ' ').replace(/\\/, ' ');