簡體   English   中英

正則表達式,用於刪除非數字后緊跟的零

[英]regular expression for deleting zeros that come immediately after a non-digit

我正在編寫代碼,以將成千上萬的數字(以3的大寫形式分隔)轉換為無數(以4的大寫形式分隔)日語格式。

當前代碼產生以下結果:
例如)
輸入: 123,456,789,123,456
輸出: 123兆4567億8912萬3456

使用正則表達式,我已經能夠刪除四個0的序列以及前myriad = myriad.replace(/0000\\D/g, "");
結果:
輸入: 12,300,002,345
輸出: 123億2345 (刪除了0000萬

但是,該代碼當前不會刪除不必要的零:
例如)
輸入: 32,131,200,232,132
輸出: 32兆1312億0023萬2132

(我想刪除23萬之前的兩個零)

我正在嘗試找到正則表達式解決方案,並嘗試
myriad = myriad.replace(/?=0{1,3}/g, ""); 無濟於事...我很困惑,任何建議都會有所幫助

編輯:我認為正則表達式應該替換任何\\ D后面的0,但是我不知道如何刪除它們而不刪除前面的字符

編輯:工作中的應用程序:

 <!DOCTYPE html> <html> <head> <title>変換天才</title> <script> //myriad converter function help from Stack Overflow user paxdiablo function makeNum(num) { num = num.replace(/,/g,""); //remove commas var markers = "萬億兆京該秭穣溝澗正載極"; var result = ""; //regroup in myriads while (num.length > 4) { if (markers.length == 0) { result = "(?)" + num.substr(num.length-4) + result; } else { result = markers.substr(0, 1) + num.substr(num.length-4) + result; markers = markers.substr(1); } num = num.substr(0, num.length-4); } return num + result; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // insert commas for readability //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx function makeCom(num){ num = num.replace(/,/g, ""); var result = num.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, "$1,"); return result; } function convert(){ var innum = document.getElementById("input").value; var parsnum = (innum.replace(/,/g,"")); if (isNaN(parseInt(parsnum)) == true) { document.getElementById("converted").innerHTML = "Please enter valid number."; } else { var myriad = makeNum(innum); // delete unnec. zeros myriad = myriad.replace(/0000\\D/g, ""); myriad = myriad.replace(/(\\D)0+/g, "$1"); document.getElementById("converted").innerHTML = myriad ; //display number with commas var commanum = makeCom(innum); document.getElementById("commaed").innerHTML = "You entered: " + commanum ; } } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // button functions //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx function multiplier(kake) { var mult = document.getElementById("input").value; if (mult == "") { mult = kake; } else if (isNaN(mult)==false){ mult = (mult * kake); } else { document.getElementById("converted").innerHTML = "Please enter valid number"; return; } document.getElementById("input").value = mult; } function thou(){ multiplier(1000); } function xMil(){ multiplier(1000000); } function xBil(){ multiplier(1000000000); } function xTril(){ multiplier(1000000000000); } function xQuad(){ multiplier(1000000000000000); } function clr(){ document.getElementById("input").value = ""; document.getElementById("converted").innerHTML = ""; } </script> </head> <body> <div><p>Enter a large whole number (commas OK). </p></div> <input type="text" id="input"/> <input type="submit" id="submit" value="Convert" onclick="convert()"> <br> <input type="button" id="xthou" onclick="thou()" value="thousand"> <input type="button" id="xmil" onclick="xMil()" value="million"> <input type="button" id="xbil" onclick="xBil()" value="billion"> <br> <input type="button" id="xtril" onclick="xTril()" value="trillion"> <input type="button" id="xquad" onclick="xQuad()" value="quadrillion"> <input type="button" id="clr" onclick="clr()" value="Clr"> <br><br> <div><span id="commaed"></span></div> <br> <div id="converted"></div> </body> </html> 

您需要使用捕獲組。

string.replace(/(\D)0+/g, "$1")

(\\D)捕獲一個非數字字符,並且后面的0+將匹配一個或多個0。 用組索引1中存在的字符替換匹配的字符將為您提供所需的輸出。

我發現正則表達式小提琴對這種事情很有幫助。 我在這里做了一個: https : //regex101.com/r/jG3aB5/1

我認為將解決您的問題的正則表達式是這樣的:

(?:[^0-9])*(0*)

它與跟隨單個非數字字符的任意數量的零匹配。 非數字字符不會被捕獲,也不會被替換。

另一種方法:使用向后搜索不包含匹配字符\\D而僅匹配零。 請查看正在運行的演示

/(?!\D)0+/g

在您的情況下:

myriad = myriad.replace(/(?!\D)0+/g, "");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM