用于删除紧跟在非数字之后的零的正则表达式

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億23450000万 被删除)

但是,代码目前不会删除不必要的零:
例如)
输入: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, ",");

   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, "");
 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, "")

(\D) 捕获一个非数字字符,后面的 0+ 将匹配一个或多个 0。用组索引 1 中存在的字符替换匹配的字符将为您提供所需的输出。

我发现正则表达式小提琴对这类事情很有帮助。我在这里做了一个: https://regex101.com/r/jG3aB5/1

我认为可以解决您问题的正则表达式是这个:

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

它匹配单个非数字字符后的任意数量的零。非数字字符不被捕获,不会被替换。

另一种方法:使用lookbehind 不包括匹配字符\D,但只匹配零。请查看工作 DEMO

/(?!\D)0+/g

你的情况:

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