1

我一直无法找到一个与我想要的类似的示例,即替换:

% 与 %25

& 与 %26

/ 带 %2F

# 使用 %23

" 有空格

\ 有空格

作为参考,我将 GWT 与 String.replaceAll 一起使用,但我询问的是 Javascript,因为无论如何它都是翻译成的。我知道(组件)URI 编码,但这不是我想要的,我只需要这些字符。

稍后编辑:我正在寻找一种方法来使用一个或两个正则表达式,现在它是这样完成的:

splits[i].replaceAll("%", "%25").replaceAll("&", "%26").replaceAll("/","%2F").replaceAll("#", "%23").replaceAll("\"", "").replaceAll("\\\\", " ");

但这对我来说似乎很难看。

4

2 回答 2

8

(这是针对 JavaScript 的,这是您询问的语言。请注意,它在 Java 中会完全不同。)

在 JavaScript 中,使用replace正则表达式并传入一个函数是很简单的:

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);
});

...因为我们可以单独进行"\替换,并摆脱检查我们匹配的内容。实例| 来源

于 2012-04-24T10:23:42.877 回答
0
String.replace(/%/, '%25').replace(/&/, '%26').replace(/\//, '%2F').replace(/#/, '%23').replace(/"/, ' ').replace(/\\/, ' ');
于 2012-04-24T10:23:18.727 回答