web-dev-qa-db-fra.com

Comment remplacer la dernière occurrence de caractères dans une chaîne à l'aide de javascript

Je n'arrive pas à trouver comment remplacer le dernier ',' dans une chaîne par 'et':

Ayant cette chaîne: Test1, test2, test3

et je veux finir avec: test1, test2 et test3

J'essaie quelque chose comme ça:

var dialog = 'test1, test2, test3';    
dialog = dialog.replace(new RegExp(', /g').lastIndex, ' and ');

mais ça ne marche pas

28
Henrik Stenbæk
foo.replace(/,([^,]*)$/, ' and $1')

utilisez l’ancre $ ( end of line ) pour vous indiquer votre position et recherchez un motif à droite de l’index des virgules qui n’inclut pas d’autres virgules.

Modifier:

Ce qui précède fonctionne exactement pour les exigences définies (bien que la chaîne de remplacement soit lâche de manière arbitraire), mais basé sur les critiques de commentaires, le texte ci-dessous reflète mieux l'esprit de l'exigence initiale.

console.log( 
   'test1, test2, test3'.replace(/,\s([^,]+)$/, ' and $1') 
)

45
annakata
result = dialog.replace(/,\s(\w+)$/, " and $1");

$1 fait référence au premier groupe de capture (\w+) de la correspondance.

4
splash

modèle de recherche regex\s ([^,] +) $

Line1: If not, sdsdsdsdsa sas ., sad, whaterver4
Line2: If not, fs  sadXD sad ,  ,sadXYZ!X
Line3: If not d,,sds,, sasa sd a, sds, 23233

Rechercher avec des motifs trouvés Ligne1: whaterver4 Ligne3: 23233

Pourtant, ne trouve pas Line2: sadXYZ! X
Il ne manque qu'un espace

0
ricksalmon