为什么我不能替换包含一个Unicode字符串?

问题描述 投票:0回答:1

我想在使用正则表达式使用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。与此同时,我不能注销matchp1,这我不知道为什么。

什么是替换的unicode与我期望的字符串的正确方法是什么?

javascript regex
1个回答
2
投票

您模式

\\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过,当然,所以他们会匹配为好,这是不是你想要的 - 找出你想要匹配字符的准确范围,并把该范围进入角色组。

© www.soinside.com 2019 - 2024. All rights reserved.