我正在尝试使用具有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的正确方法是什么?
答案 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,所以它们也将被匹配,这不是您想要的-计算出要匹配的字符的精确范围,并放入该范围进入字符集。