3

textarea16 進数のみを含むように値を変更しようとしています。
たとえば、これが にある場合textarea:

    RMCP01
    Mario Kart Wii

    CCP items
    * C27EF0EC 00000002
    * 3FE08000 93BF1500
    * 3BE00000 00000000
    * 28345842 ff7f0080
    * 8000000F 00000000
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fffb0004
    * 8000000F 00000020
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fffd0002
    * 8000000F 0000000B
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 7fff8000
    * 8000000F 00000009
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 bfff4000
    * 8000000F 00000004
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 efff1000
    * 8000000F 0000000E
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fbff0400
    * 8000000F 0000000F
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 fff70008
    * 8000000F 00000007
    * 8000000E 00000001
    * E0000000 00000000
    * 28345842 ffdf0020
    * 8000000F 00000003
    * 8000000E 00000001
    * E0000000 00000000
    * E2000001 00000000
    * 48000000 809C1900
    * DE000000 80008180
    * 58010000 00000008
    * DE000000 80008180
    * 48100000 80001500
    * DE000000 80008180
    * 9421000F 0000008c
    * 14000090 00000001
    * E0000000 80008000

    Connect Hacker
    * 046592D8 3BA0270F

    VR
    * 28345842 ff7b0084
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00008ae3
    * E0000000 00000000
    * 28345842 ddff2200
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00000001
    * E0000000 00000000
    * 28345842 ff870078
    * 48000000 809BD748
    * DE000000 90009380
    * 5A010000 00009050
    * 12000000 00001388
    * CC000000 00000000
    * E0000000 80008000

    RBC
    * 045334B0 38000002
    * 04533510 2C000003

    Drift
    * 048B5CC0 00000000
    * 048B5CC4 00000000
    * 048B5CC8 00010000
    * 048B5B38 00010000

    Invicibilty
    * F6000001 80008100
    * A88301A8 3BC00000
    * 1400002C 60000000
    * F6000001 80008100
    * EC4300B2 C0630088
    * D2000020 00000002
    * 38000001 9803000A
    * 80030008 00000000
    * E0000000 80008000

    BBB
    283457E2 BFFE4001
    048B59F8 43960000
    E0000000 00000000
    283457E2 BFFD4002
    048B59F8 442F0000
    E0000000 00000000
    283457E2 FBEF0410
    048B59F8 43110000
    E0000000 00000000
    283457E2 EBFF1400
    048B59F8 40000000
    E0000000 00000000

    Deactivator
    * 28348200 FEFF0100
    * 8000000D 00000001
    * 48000000 809C1900
    * DE000000 80008180
    * 58010000 00000008
    * DE000000 80008180
    * 4A100000 0000008C
    * 30000000 00000014
    * 14000000 00000014
    * 14000004 00000000
    * E0000000 00000000
    * 28348200 FDFF0200
    * 8000000D 00000000
    * E0000000 80008000

結果は、最初の文字以外のすべてです。(最初の行が「MCP01」に変わります)これは私のコードです:

        function check() {
            var c=$("#c").value;
            c=c.replace(/[^A-Fa-f0-9]/, "");
            return c;
        }

なにが問題ですか?

4

2 に答える 2

8

グローバル置換を実行するには、フラグを使用する必要があります/g: -

c=c.replace(/[^A-Fa-f0-9]/g, "");

「ABRET」では を置き換えるだけで、有効な16進数ではないため、このアプローチは失敗する可能性があることに注意してR and TくださいABE

16 進数だけを保持したい場合は、おそらく正規表現を次のように変更する必要があります。

/\b[0-9a-fA-F]{6}\b/g

上記の正規表現はHex数字のみに一致します。したがって、上記のパターンに一致しないすべての部分文字列を置き換えるだけです。残りの実装はあなたに任せます。

上記の正規表現を次のように変更することもできます: -

/\b[0-9A-F]{6}\b/gi

フラグを使用/iすると、正規表現はcase-insensitive一致します。Aと同じですa

于 2012-12-23T11:20:11.500 に答える
0

これらのコードは十分に機能しませんでしたが、素晴らしいものです。最終的に使用したコードは次のとおりです。

var c=$("c").val();
var newc="";
var counter=0;
var newcstack="";
for (var i=0; i<c.length; i++) {
    if (c.charAt(i).match(/[A-Fa-f0-9]/)) {
        newcstack+=c.charAt(i);
        counter++;
        if (counter==8) {
            newc+=newcstack;
            counter=0;
            newcstack="";
        }
    }
    else {
        counter=0;
        newcstack="";
    }
}
return newc;
于 2012-12-23T11:51:27.750 に答える