/ / regex заместващ няколко периода в плаващ номер - javascript, regex

заместване на множество периоди в плаващ брой - javascript, regex

Ако въведем нещо подобно: a1.b22.333, искам да изведе или:

1,22333 или 122.333

Тя се отървава от нецифрените знаци и всички периоди след 1.

Най-добрите ми предположения за това са:

obj.value = obj.value.replace( /[^0-9.{1}]+/g ,  "");
obj.value = obj.value.replace( /[^0-9.{2,}]+/g ,"");
obj.value = obj.value.replace( /[^0-9.(?=.*.)]+/g ,"");

Но всички тези резултати 1.22.333

Как мога да се отърва от този допълнителен период?

Благодаря за вашата помощ.

Отговори:

13 за отговор № 1

Можете да го направите по следния начин:

obj.value = obj.value.replace(/[^d.]/g, "")
.replace(/./, "x")
.replace(/./g, "")
.replace(/x/, ".");

Това премахва всички нечислени, непериодни знаци, след това заменя само първия период с „х“, след това премахва всички останали периоди, след което променя „xxx“ обратно към периода.


1 за отговор № 2

Смесете в някои нарязвания на струни и той работи прекрасно * /

/* Remove everything but digits and dots */
var s = ".swe4.53dv3d.23v23.we".replace(/[^d.]/g, "");

/* Trim the string from dots */
s = s.replace(/^.+/, "").replace(/.+$/, "");

/* Fetch first position of dot */
var pos = s.indexOf(".");

/* Slice the string accordingly, and remove dots from last part */
s = s.slice(0, pos + 1) + s.slice(pos + 1, s.length).replace(/./g, "");

/* s === "4.5332323" */

0 за отговор № 3

Ако използвате функция за определяне на заместващия низ, можете да потърсите нецифрени цифри и след това да преброите колко точки са се появили досега:

var val = "a1.b22.333",
i = 0;

val = val.replace(/D/g, function(m) {
if (m===".")
return (++i > 1) "" : ".";
return "";
});