Sprintf: tekst en variabelen samenvoegen in JavaScript

De functie sprintf kom je tegen in meerdere programmeertalen, een functie waarmee je variabelen in een tekst plaatst. Er zijn veel mogelijkheden om deze te formatteren. bijvoorbeeld uitlijnen of het aantal decimalen instellen. In veel gevallen heb je die niet nodig, en is een simpele functie die slechts de variabelen op de juiste plaats zet een betere keus. Zeker in JavaScript, waar je de code kort  wilt houden om sneller te laden. In dit voorbeeld zie je hoe sprintf gebruikt wordt:

// Simple string concatenation
var html1 = '<a href="' + url + '">' + link + '</a>';

// Using sprintf
var html2 = sprintf( '<a href="%s">%s</a>', url, link );

In dit artikel beschrijf ik een simpele functie die precies dat doet–tekst op de juiste plek invoegen. Voor uitgebreidere versies van sprintf, zoek je op Google naar ‘javascript sprintf’, en vind je verschillende goede versies. Als je die niet nodig hebt, lees dan verder.

De functie hieronder vervangt ‘%s’ in de format string door de verdere argumenten.

function sprintf( format )
{
  for( var i=1; i < arguments.length; i++ ) {
    format = format.replace( /%s/, arguments[i] );
  }
  return format;
}

De functie gebruikt twee mogelijkheden van JavaScript waar ik dieper op in wil gaan.

Variabel aantal argumenten

Ondanks de definitie ‘function sprintf( format )‘, kun je meerdere argumenten meegeven aan de functie. Ze hebben dan geen naam, maar je kunt ze gebruiken door het array arguments uit te lezen.

Vervangen met regular expressions

De replace methode can gebruikt worden met strings en met regular expressions als eerste argument. Als we een string ‘”%s”‘ gebruiken, zou tijdens de eerste loop iedere ‘%s’ al vervangen worden door het eerstvolgende argument. Door de regular expression ‘/%s/’, te gebruiken, wordt alleen de eerste ‘%s’ vervangen (als de global option was gegeven, zoals in ‘/%s/g’, zouden meteen alle  ‘%s’ vervangen zijn). In de volgende loop, wordt de volgende ‘%s’ vervangen door het volgende argument, tot alle argumenten geweest zijn.

Opmerkingen

In deze simpele uitvoering is het niet mogelijk om een uitzondering te maken met bijv. ‘%%s’, of ‘\%s’, dus je kunt de letterlijke tekst ‘%s’ niet in de uiteindelijke tekst krijgen–tenzij deze vaker voorkomt dan het aantal argumenten.

Het aantal keren dat ‘%s’ in het format voorkomt, zou gelijk moeten zijn aan het aantal argumenten. Als dit niet het geval is, komt er echter geen foutmelding. Als ‘%s’ minder vaak voorkomt, worden de resterende argumenten niet gebruikt, als er onvoldoende argumenten zijn blijven de resterende ‘%s’ in de tekst staan.

This post is also available in: Engels

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.