2009-02-02 10 views
0

J'ai une chaîne qui ressemble à "(3) New stuff" où 3 peut être n'importe quel nombre.
Je voudrais ajouter ou soustraire à ce nombre.JavaScript: ajouter ou soustraire du nombre dans la chaîne

Je compris la façon suivante:

var thenumber = string.match((/\d+/)); 
thenumber++; 
string = string.replace(/\(\d+\)/ ,'('+ thenumber +')'); 

Est-il possible de faire plus élégant, il?

Répondre

2

je crois Gumbo était sur la bonne voie

"(42) plus (1)".replace(/\((\d+)\)/g, function(a,n){ return "("+ (+n+1) +")"; }); 
1

À court d'étendre l'objet String, ça me semble bien.

String.prototype.incrementNumber = function() { 
    var thenumber = string.match((/\d+/)); 
    thenumber++; 
    return this.replace(/\(\d+\)/ ,'('+ thenumber +')'); 
} 

Utilisation serait alors:

alert("(2) New Stuff".incrementNumber()); 
+0

Contrairement Array, je ne pense pas la chaîne d'extension est mauvais. Depuis combien de fois itérez-vous les objets String? –

+0

J'aime cette approche aussi, moi-même. –

1

Je crois que votre méthode est la meilleure élégante que vous pouvez avoir pour les raisons suivantes:

  • depuis l'entrée est pas un nombre « propre » , vous avez besoin d'impliquer une sorte d'analyseur de chaînes. Utilisation d'expressions régulières est la méthode très de code efficace de le faire
  • en regardant le code, il est clair ce qu'il fait

court d'envelopper cela en fonction, je ne pense pas qu'il y ait beaucoup plus à faire

5

une autre façon:

string = string.replace(/\((\d+)\)/ , function($0, $1) { return "(" + (parseInt($1, 10) + 1) + ")"; }); 
1

Comme dit GALETS, je ne pense pas que votre solution est mauvaise, mais ici est une fonction qui ajoutera une valeur spécifiée à un numéro dans une position spécifiée dans un string.

var str = "fluff (3) stringy 9 and 14 other things"; 

function stringIncrement(str, inc, start) { 
    start = start || 0; 
    var count = 0; 
    return str.replace(/(\d+)/g, function() { 
     if(count++ == start) { 
      return(
       arguments[0] 
       .substr(RegExp.lastIndex) 
       .replace(/\d+/, parseInt(arguments[1])+inc) 
      ); 
     } else { 
      return arguments[0]; 
     } 
    }) 
} 

// fluff (6) stringy 9 and 14 other things :: 3 is added to the first number 
alert(stringIncrement(str, 3, 0)); 

// fluff (3) stringy 6 and 14 other things :: -3 is added to the second number 
alert(stringIncrement(str, -3, 1)); 

// fluff (3) stringy 9 and 24 other things :: 10 is added to the third number 
alert(stringIncrement(str, 10, 2)); 
Questions connexes