0

文字コードの配列を Unicode 文字に変換し、正規表現で検索することについて誰かが洞察を持っているかどうか疑問に思っています。

あなたが持っている場合

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

ループを使用して、Unicode の最初の 4 つの制御文字の文字列に変換できます。

ただし、正規表現を作成する場合

"(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];
4

1 に答える 1

2

いくつかの詳細を変更することで、この例を機能させることができます。

最初の 4 つの制御文字ではなく、一般的な印刷可能な Unicode 文字に関心があると仮定するとa、文字列 "hello" のテスト ベクトルは次のようになります。

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

両方の「l」文字に一致させたい場合:

var r = [108, 108]

正規表現を作成する場合、文字コードは 16 進数である必要があります。

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

その後、期待どおりの結果が表示されるはずです。

于 2014-05-11T05:51:23.260 に答える