Javascript:正则表达式,用于将某些字符替换为十六进制代码

Javascript: regex to replace some characters with their hexadecimal code

本文关键字:替换 字符 十六进制 代码 正则表达式 用于 Javascript      更新时间:2023-09-26

我找不到一个类似于我想要的示例,即替换:

%与%25

&与 %26

/与 %2F

# 与 %23

"有空间

'' 带空间

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

后来编辑:我正在寻找一种在一两个正则表达式中执行此操作的方法,现在它是按这样的方式完成的:

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

但这对我来说似乎很丑陋。

(这是针对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);
});

。因为我们可以分别进行"'替换,并摆脱对匹配内容的检查。现场示例 |源

String.replace(/%/, '%25').replace(/&/, '%26').replace(/'//, '%2F').replace(/#/, '%23').replace(/"/, ' ').replace(/''/, ' ');