Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Unicode转换和搜索_Javascript_Regex_Unicode_Escaping_Character Codes - Fatal编程技术网

Javascript Unicode转换和搜索

Javascript Unicode转换和搜索,javascript,regex,unicode,escaping,character-codes,Javascript,Regex,Unicode,Escaping,Character Codes,我想知道是否有人对将字符代码数组转换为Unicode字符,并用正则表达式搜索它们有什么见解 如果你有 var a = [0,1,2,3] 您可以使用循环将它们转换为unicode中前四个控制字符的字符串 但是,如果要创建正则表达式 "(X)+" 其中X==字符代码3转换为其Unicode等价物,搜索似乎永远不起作用。如果我检查字符串的长度,它是正确的,.*返回字符串中的所有字符。但是我在构造正则表达式来搜索字符串时遇到了困难,而我首先要做的就是字符代码。有什么建议吗 编辑: 变量a=[0,1

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

如果你有

var a = [0,1,2,3]
您可以使用循环将它们转换为unicode中前四个控制字符的字符串

但是,如果要创建正则表达式

"(X)+"
其中X==字符代码3转换为其Unicode等价物,搜索似乎永远不起作用。如果我检查字符串的长度,它是正确的,.*返回字符串中的所有字符。但是我在构造正则表达式来搜索字符串时遇到了困难,而我首先要做的就是字符代码。有什么建议吗

编辑:

变量a=[0,1,2,3,0x111]; str=“”

for(变量i=0;i
编辑

//工作代码:
变量a=[0,1,2,3,0x111];
str=“”;
对于(变量i=0;i2)?“\\u”:“\\x”)+((“0000”+十六进制)切片((十六进制长度>2)?-4:-2);
}
reg+=”;
var res=str.match(RegExp(reg))[0];

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

假设您通常对可打印的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)测试为正值,因此我猜单字符十六进制不能将其截断。对格式化这样的十六进制字符串有什么想法吗?编辑为使用前导零进行填充。如果在正则表达式中使用
\uxxx
(其中
xxxx
是Unicode字符的四个十六进制数字),则前导填充字符串将有三个零。非常感谢您的帮助!你在说这个解决方案很好。我把工作代码作为编辑发布了。谢谢你的帮助!
var r = [108, 108]
reg += "\\x" + ("0" + r[i].toString(16)).slice(-2);