2012-12-23 61 views
1

我試圖將textarea中的值更改爲僅包含十六進制數字。
舉例來說,如果我有這樣的textareaJavaScript - 從字符串中刪除所有內容但是十六進制

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; 
     } 

出了什麼問題?

+1

它應該是'$(「#C」)VAL()',而這種邏輯是行不通的,因爲'Deactivator'有一堆的有效十六進制字符它 – Esailija

回答

6

您應該使用/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相同。

+0

其實我想包括所有的十六進制數字,當他們在一起8。檢查我的答案。 – gskartwii

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; 
+0

@gskartwii ..你不應該使用'for循環'來處理你的正則表達式中很少修改的東西。使用'/ [A-Fa-f0-9] {8} /'按順序匹配8個十六進制數字。 –

+0

@RohitJain我不知道怎麼用'regex'。 – gskartwii

相關問題