用于删除紧跟在非数字后面的零的正则表达式
regular expression for deleting zeros that come immediately after a non-digit
我正在编写代码,将以千计的数字(在写作中以3块为单位分隔)转换为用于日语格式的无数个数字(在书写中以4块为单位分割)。
当前代码产生以下结果:
ex)
输入:123,456,789,123,456
输出:123兆4567億8912万3456
使用正则表达式,我已经能够删除四个0的序列和myriad = myriad.replace(/0000'D/g, "");
的过程字符
结果:
输入:12,300,002,345
输出:123億2345
(删除了0000万
)
然而,该代码目前并没有删除不必要的零:
ex)
输入: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中的字符将获得所需的输出。
我发现regex fiddles对这类事情非常有用。我在这里做了一个:https://regex101.com/r/jG3aB5/1
我认为将解决您的问题的正则表达式是这样的:
(?:[^0-9])*(0*)
它匹配单个非数字字符后面任意数量的零。非数字字符不会被捕获,也不会被替换。
另一种方法:使用lookbacking不包括匹配字符'D
,而只匹配零。请参阅正在运行的演示
/(?!'D)0+/g
在您的情况下:
myriad = myriad.replace(/(?!'D)0+/g, "");
- 正则表达式与数字中的第二个点匹配
- 正好包含2个大写字母和3个数字的正则表达式
- 键按下上的正则表达式 仅限制数字
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 正则表达式(JavaScript),用于创建数字必须大于x的数据验证
- 用于删除紧跟在非数字后面的零的正则表达式
- XXXXXX的正则表达式.XX格式的数字
- javascript正则表达式,用于匹配带数字和不带数字的字符串
- Javascript中的正则表达式,用于只有数字的字符串,并且不应在除数字以外的任何位置包含任何字符
- JavaScript正则表达式(带_-的字母数字字符)
- 用于数字输入的正则表达式
- 用Javascript正则表达式过滤十六进制数字
- 我应该使用什么正则表达式来验证数字模式
- 用于获取两个方括号之间的数字的正则表达式
- 正则表达式删除最后一个数字之后的字符串
- Javascript 正则表达式在特定单词或数字之后拆分
- 正则表达式 jquery 将数字替换为链接
- 正则表达式允许字母数字和空格,但不允许连续两个空格
- 正则表达式,字符串末尾必须包含数字