2009-05-15 7 views

Répondre

8

Essayez ceci:

"1.0.123.0".replace(/(\d+\.\d+\.)(\d+)(\.\d+)/, function($0, $1, $2, $3) { 
    return $1 + (parseInt($2) + 1) + $3; 
}); 
2

Pourquoi faut-il une expression régulière? La notation est cohérente et ne varie que légèrement; une expression régulière n'est pas nécessaire.

function incrementStrN(str) { 
    var split = str.split('.'); 
    split[2]++; 
    return split.join('.'); 
} 
incrementStrN("1.0.123.0"); // Returns "1.0.124.0" 

Je sais que cela ne semble pas très joli mais c'est plus rapide que d'utiliser une expression régulière; plus c'est plus facile à customiser; par exemple, vous pouvez le mettre en œuvre de telle manière que la section à incrémenter peut être modifiée: (voir @param sec)

function incrementStrN(str, sec) { 
    var split = str.split('.'); 
    split[sec-1]++; 
    return split.join('.'); 
} 

incrementStrN("1.0.123.0", 1); // Returns "2.0.123.0" 
incrementStrN("1.0.123.0", 3); // Returns "1.0.124.0" 
+0

regex a moins de code à écrire, et est plus puissant – Graviton

+0

Un avis plat comme ça ne vous mènera nulle part. J'aime regex autant que n'importe qui mais il y a un temps et un endroit. Le fait est que, dans cette situation, une regex sera plus lente ... – James

Questions connexes