繁体   English   中英

JavaScript - 从字符串中删除所有内容但是Hex

[英]JavaScript - Remove Everything from String But Hex

我正在尝试将textarea的值更改为只包含十六进制数字。
例如,如果我在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;
        }

怎么了?

您应该使用/g标志执行全局替换:-

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

请注意,此方法可能会失败,因为在“ ABRET”中,它将仅替换R and T ,但是ABE不是有效的十六进制数字。

如果您只想保留十六进制数字,则应该将正则表达式更改为:-

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

上面的正则表达式只能匹配Hex数字。 因此,只需替换与上述模式不匹配的每个子字符串。 休息我留给你实施。

您还可以将上述正则表达式修改为:-

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

使用/i标志,正则表达式不case-insensitive 所以, Aa

这些代码不够好,但它们很棒。 这是我最终使用的代码:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM