为什么不能替换包含unicode的字符串?

时间:2019-02-04 03:24:26

标签: javascript regex

我正在尝试使用具有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的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您的模式

from itertools import combinations
def sumPairs(l, s):
    for a, b in combinations(lst, 2):
        if a+b == s:
            return True
    return False 

将匹配字符串的一部分,其字面包含的反斜杠,后跟\\u[0-9A-F]{4} ,后跟4个十六进制字符。但是您的输入字符串仅包含6个字符,其中5个是“ hello”:

u

您需要在其中匹配实际Unicode字符

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

,但是像“ Hello”这样的字母字符当然也是Unicode,所以它们也将被匹配,这不是您想要的-计算出要匹配的字符的精确范围,并放入该范围进入字符集。