Sie können String.prototype.match() und String.prototype.replace() in Verbindung mit regulären Ausdrücken verwenden, um die entsprechenden Nummern durch die gewünschten zu ersetzen.
Anhand Ihres spezifischen Beispiels können Sie das gewünschte Ergebnis auf folgende Weise erhalten.
function getFormatted(arr) {
return arr.map(function(str) {
// if str ends in '00'
if (str.substring(str.length - 2) === '00') {
return str.substring(0, str.length - 2) + '.' + '00';
// if str does NOT end in '00'
} else if (str.substring(str.length - 2) !== '00') {
return str + '.00';
}
})
}
function replacer(str, matches, formatted) {
return matches.reduce(function(acc, cur, i) {
return acc.replace(cur, formatted[i]);
}, str)
}
var str = 'the bouncy 7000 bunny hops 4 you';
var matches = str.match(/\d+/g);
console.log(matches);
// => ["7000", "4"]
var formatted = getFormatted(matches);
console.log(formatted);
// => ["70.00", "4.00"]
var replaced = replacer(str, matches, formatted);
console.log(replaced);
// => ["the bouncy 70.00 bunny hops 4.00 you"]
Sie können die Regeln in getFormatted
einstellen müssen, um Ihre spezifischen Anwendungsfälle anzupassen.
aktualisieren
Wenn Sie sich für einen einfacheren Weg zu gehen darüber suchen, können Sie ein Array von Arrays, bestehend aus regulären Ausdrücken und Transformationsfunktionen übergeben. Dies nimmt alle Übereinstimmungen des regulären Ausdrucks (erstes Argument) und wendet eine Transformationsfunktion auf sie an (zweites Argument).
var replacer = function(str, arr) {
return arr.reduce(function(acc, cur) {
return acc.match(cur[0]).reduce(function(acc, cur) {
return acc.replace(cur, cur[1](cur));
}, str)
}, str)
}
var replaced = replacer('the bouncy 7000 bunny hops 4 you', [
[/\d+/g, function(match) { return match + '.00'; }],
[/bunny/, function(match) { return 'dog'; })]
]);
console.log(replaced);
// = > "the bouncy 7000.00 dog hops 4.00 you"
Oder, wenn Sie mit ES6 Syntax ...
var replacer = (str, arr) => arr.reduce((acc, [reg, fn]) => {
return acc.match(reg).reduce((acc, match) => {
return acc.replace(match, fn(match));
}, str);
}, str);
}
var replaced = replacer('the bouncy 7000 bunny hops 4 you', [
[/\d+/g, (match) => match + '.00'],
[/bunny/, (match) => 'dog']
]);
console.log(replaced);
// = > "the bouncy 7000.00 dog hops 4.00 you"
Wahrscheinlich nicht. Sie müssten Regex verwenden, um nach allen Zahlen zu suchen und sie durch die Dezimalformatierung zu ersetzen. Es gibt keine magische Möglichkeit, dies zu tun. –
Zumindest geben uns Regeln der Formatierung: warum 4 wurde 4.00 und warum 7000 wird nicht 70000.00? –
Weil 4 4,00 monetär und 7000 nicht 70000,00 ist. 4 hat den gleichen Wert wie 4,00, aber 7000 hat nicht den gleichen Wert wie 70000,00. Ich dachte, das wäre offensichtlich. Entschuldigen Sie. – TheHumblePedestrian