次の呼び出しは、すべての末尾の s と末尾のreplace()
を置き換えます(存在する場合)。0
.
eval(expression).toPrecision(10).replace(/(?:\.0+|(\.\d+?)0+)$/, "$1")
それはどのように機能しますか?
/(?:\.0+|(\.\d+?)0+)$/
\.0+
または(\.\d+?)0+
文字列の末尾 ( ) を探します$
。は、 「キャプチャ」されるの?:
を防ぎます。\.0+|(\.\d+?)0+
\.0+
.
の後に任意の数の0
sが続くものと一致します。
(\.\d+?)0+
が一致.
し、その後に少なくとも 1 つの数字が続き、その後に少なくとも 1 つの0
. は、 ができるだけ多くの に一致?
するようにします。括弧は非sを「キャプチャ」します。0+
0
0
の 2 番目のパラメーターreplace()
は、一致したものを置き換える新しい文字列です。は$1
並べ替えの変数でありreplace()
、一致した値を最初にキャプチャされた値に置き換えるように指示します (1
は の後だったため$
)。この場合、最初に取得された値は\.\d+?
一致したものです。
したがって、最後に:
.
任意の数の s が続く0
と破棄されます
.
その後に非0
s が続き、その後に0
s が続くと、0
s は破棄されます
例
、 、および1
、2
、および3
の精度のメソッドの比較については、以下を参照してください。各グループの最初 (太字) の項目がこのメソッドです。赤い項目は、期待に合わないものです。.40*1
4*1
40*1
var tests = [
'.04*1',
'.40*1',
'4*1',
'40*1'
];
var results = {};
for (var i = 0; i < tests.length; i += 1) {
results[i] = {};
for (var p = 1; p < 3; p += 1) {
results[i][p] = {};
results[i][p][0] = {
'output': eval(tests[i]).toPrecision(p).replace(/(?:\.0+|(\.\d+?)0+)$/, "$1"),
'regex': '/(?:\.0+|(\.\d+?)0+)$/, "$1"'
};
results[i][p][1] = {
'output': eval(tests[i]).toPrecision(p).replace(/\.0+$/, ""),
'regex': '/\.0+$/, ""'
};
results[i][p][2] = {
'output': eval(tests[i]).toPrecision(p).replace(/\.([^0]+)0+$/, ".$1"),
'regex': '/\.([^0]+)0+$/, ".$1"'
};
results[i][p][3] = {
'output': eval(tests[i]).toPrecision(p).replace(/0+$/, ""),
'regex': '/0+$/, ""'
};
results[i][p][4] = {
'output': eval(tests[i]).toPrecision(p).replace(/\.?0+$/, ""),
'regex': '/\.?0+$/, ""'
};
}
}
for (var i in results) {
$("#result").append("<h1>" + tests[i] + "</h1>");
for (var p in results[i]) {
var expected = null;
for (var t in results[i][p]) {
var div = $("<div></div>");
if (t == 0) {
expected = results[i][p][t].output;
div.addClass("expected");
} else if (results[i][p][t].output !== expected) {
div.addClass("invalid");
}
div.append("P" + p + ": " + results[i][p][t].output);
div.append(" <small>" + results[i][p][t].regex + "</small>");
$("#result").append(div);
}
$("#result").append("<br>");
}
}
body { font-family: monospace; }
.expected { font-weight: bold; }
.invalid { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="result"></div>