我想在使用正则表达式使用JavaScript的味道字符串替换一个unicode。但是,我无法取代的unicode字符串的愿望字符串。
这按预期工作:
function replacer(match, p1) {
return "World";
}
var newString = 'Hello9A'.replace(/[0-9A-F]{2}/g, replacer);
console.log(newString); // HelloWorld
这是我想它去工作的代码:
function replacer(match, p1) {
console.log("match: ", match);
console.log("p1: ", p1);
return "World";
}
var newString = 'Hello\u0B70'.replace(/\\u[0-9A-F]{4}/g, replacer);
console.log(newString);
我预计newString
应该HelloWorld
。但是,我得到Hello୰
。
我甚至在Regex101测试和正则表达式确实捕捉\u0B70
。与此同时,我不能注销match
和p1
,这我不知道为什么。
什么是替换的unicode与我期望的字符串的正确方法是什么?
您模式
\\u[0-9A-F]{4}
字面上包含反斜杠,随后u
,随后4个十六进制字符将匹配字符串的一部分。但是你的输入字符串只包含6个字符,其中5个是“你好”:
console.log('Hello\u0B70');
console.log('Hello\u0B70'.length);
你需要实际的Unicode字符匹配的有:
function replacer(match, p1) {
console.log("match: ", match);
console.log("p1: ", p1);
return "World";
}
var newString = 'Hello\u0B70'.replace(/\u0B70/g, replacer);
console.log(newString);
如果你想以匹配所有的任何Unicode字符(转换为“任何字符”,基本上都是),你可以使用的字符集,像
[\u0000-\uFFFF]
但像“你好”字母字符都是Unicode过,当然,所以他们会匹配为好,这是不是你想要的 - 找出你想要匹配字符的准确范围,并把该范围进入角色组。