【问题标题】:Javascript Unicode Conversion and SearchJavascript Unicode 转换和搜索
【发布时间】:2014-06-28 14:04:24
【问题描述】:

我想知道是否有人对将字符代码数组转换为 Unicode 字符并使用正则表达式搜索它们有任何见解。

如果你有

var a = [0,1,2,3]

您可以使用循环将它们转换为 unicode 中前四个控制字符的字符串。

但是,如果你想创建一个正则表达式

"(X)+"

其中 X == 字符代码 3 转换为其 Unicode 等效项,搜索似乎永远不会工作。如果我检查字符串的长度,它是正确的,并且 .* 返回字符串中的所有字符。但是我在构建正则表达式来搜索字符串时遇到了困难,因为我必须从字符代码开始。有什么建议吗?

编辑:

var a = [0,1,2,3,0x111]; str = "";

for(var i = 0; i < a.length; i++) {
    str += String.fromCharCode(a[i]);
}

var r = [0x111]
var reg = ""

reg += "(";
for(var i = 0; i < r.length; i++) {
var hex = r[i].toString(16);
    reg += "\\x" + hex;
}
reg += ")";

var res = str.match(RegExp(reg))[0];

编辑

//Working code:
var a = [0,1,2,3,0x111];
str = "";

for(var i = 0; i < a.length; i++) {
    str += String.fromCharCode(a[i]);
}

var r = [3,0x111]
var reg = ""

reg += "(";
for(var i = 0; i < r.length; i++) {
    var hex = r[i].toString(16);
    reg += ((hex.length > 2) ? "\\u" : "\\x") + ("0000" + hex).slice((hex.length > 2) ? -4 : -2);
}
reg += ")";

var res = str.match(RegExp(reg))[0];

【问题讨论】:

  • 您能否仅发布几行代码示例来说明您正在尝试做什么——我们可以查看而不是猜测的最小示例?以目前的形式,这个问题很难回答。
  • 我希望上面的编辑足以理解基本思想,尽管在实际应用中它会更加复杂。

标签: javascript regex unicode escaping character-codes


【解决方案1】:

通过对一些细节的更改,可以使示例生效。

假设您对一般可打印的 Unicode 字符感兴趣,而不是前四个控制字符,则字符串“hello”的测试向量 a 将是:

var a = [104, 101, 108, 108, 111]; // hello

如果你想匹配两个 'l' 字符:

var r = [108, 108]

当你构造你的正则表达式时,字符代码必须是十六进制的:

reg += "\\x" + ("0" + r[i].toString(16)).slice(-2);

之后,您应该会看到预期的结果。

【讨论】:

  • 对,所以当我用任何一种方法对正则表达式进行字符串化时,我都会得到 (\x2\x3)。这对包含前四个 unicode 字符的字符串测试为阴性,而 (.)* 对整个字符串测试为阳性。
  • 硬编码 (\x02\x03) 测试为阳性,所以我猜单个字符的十六进制并不能解决问题。对像这样格式化十六进制字符串有什么想法吗?
  • 已编辑以使用前导零执行填充。如果在正则表达式中使用\uxxxx(其中xxxx 是Unicode 字符的四个十六进制数字),则前导填充字符串将包含三个零。
  • 非常感谢您的帮助!你的填充解决方案是天才。
  • 我发布了工作代码作为编辑。感谢您的所有帮助!
猜你喜欢
  • 2013-03-08
  • 2011-02-20
  • 2010-10-05
  • 1970-01-01
  • 2012-02-15
  • 2019-05-12
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多