J'ai une chaîne variable dans mon code JavaScript contenant une liste de mots et / ou phrases séparés par des virgules, par exemple:

Chaîne 1: "abc, def hij, klm"

Chaîne 2: "abc, def"

Je veux insérer le mot «et» après la dernière virgule dans la chaîne pour obtenir

Chaîne 1: "abc, def hij et klm"

Chaîne 2: "abc et def"

J'ai rassemblé le code suivant:

// replace the last comma in the list with  ", and"  
var regEx1 = new RegExp(",(?=[A-z ]*$)" )      
var commaDelimList = commaDelimList.replace(regEx1, ", and ");

Le problème est qu'il ne fonctionne pas si la chaîne délimitée par des virgules n'a que deux éléments séparés par une virgule.

Ainsi, les résultats de l'exemple ci-dessus sont

Chaîne 1: "abc, def hij et klm"

Chaîne 2: "abc, def"

Pourquoi le RegExp ne fonctionne pas et que puis-je utiliser pour obtenir le résultat souhaité?

0
Lill Lansey 10 oct. 2011 à 17:06

3 réponses

Meilleure réponse

Pas sûr qu'une expression régulière soit la bonne façon de s'y rendre ...

Pourquoi ne pas utiliser LastIndexOf et le remplacer par votre chaîne?

1
karlipoppins 10 oct. 2011 à 13:10

Comme il s'agit d'une tâche relativement simple, une petite manipulation de chaîne peut être bénéfique - vous réaliserez également de meilleures performances.

var str = 'abc, def, hij, klm',
    index = str.lastIndexOf(','),
    JOINER = ', and';

//'abc, def, hij, and klm'
str.slice(0, index) + JOINER + str.slice(index+1);
1
John Strickler 10 oct. 2011 à 13:14

Je ne vous en ai pas essayé mais cela fonctionne

'abc, def'.replace( /,(?=[A-z ]*$)/, ", and" )
0
Davide 10 oct. 2011 à 13:12