Javascript:正则表达式用他们的十六进制代码替换一些字符

时间:2012-04-24 10:19:11

标签: javascript regex url-encoding

我无法找到一个与我想要的相似的例子,即替换:

%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("\\\\", " ");

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

2 个答案:

答案 0 :(得分:8)

(这适用于JavaScript,这是您所询问的语言。请注意,它在Java中会有很大不同。)

在JavaScript中,使用带有正则表达式的replacepassing in a function这是微不足道的:

var str = "testing % & / # \" \\";
var result = str.replace(/[%&\/#"\\]/g, function(m) {
    return (m === '"' || m === '\\') ? " " : "%" + m.charCodeAt(0).toString(16);
});

Live example | source

如果你不介意扫描字符串两次而不是一次,它可以看起来更简单(虽然还不够,我觉得值得):

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(/\\/, ' ');