7
votes

String Split basé sur les répétitions

J'ai une valeur de chaîne ( "11112233" code>). Je veux diviser cette chaîne et le séparer à 3 valeur différente.

var myVal = "11112233";
var lastVal = myVal.split(0 , 3); // split from index 0 till index 3


1 commentaires

Vous pouvez simplement faire comme ça '11112233'.Split (/ (1+ | 2+ | 3 + +) /). mais besoin d'amélioration des regex


5 Réponses :


14
votes

Essayez cette expression régulière: xxx

\ 1 * signifie "identique à la correspondance précédente, zéro ou plusieurs fois".


0 commentaires

2
votes

Il y a le substr () fonction. < P> Vous pouvez l'utiliser comme si vous avez écrit dans votre question: xxx


1 commentaires

En fait, la question est assez difficile en disant «une chose comme celle-ci». C'est toujours une réponse valide IMHO.



4
votes

Essayez comme ça

myVal='11112233'
myVal.match(/(\d)\1+/g); //["1111", "22", "33"]


0 commentaires

3
votes

Vous pouvez utiliser l'objet pour résoudre ce problème.

var str = '11112233';

var strObj = {};

for(var i = 0; i < str.length; i++){
     if(strObj[str[i]]) {
         strObj[str[i]]+=str[i];
     } else {
        strObj[str[i]] = str[i];
     }
}

for (var key in strObj) {
  if (strObj.hasOwnProperty(key)) {
    alert(key + " -> " + strObj[key]);
  }
}


2 commentaires

Il devrait être plus efficace en termes de temps et de complexité spatiale.


Pas sûr: JSPERF.com/regexp-vs-HardCodé , en ce qui concerne JSPERF: -RÉ



2
votes

Pour compléter les réponses ci-dessus, voici la solution qui n'utilise pas Regex.

function partition(acc, value){

  var last = acc[acc.length-1];
  if(last && last[0] == value) acc[acc.length-1] += value;
  else acc = acc.concat(value);

  return acc;
}

var toInt = parseInt.bind(null, 10)

var x = ([[]]).concat("112233".split(''))
              .reduce(partition).map(toInt);

// [11, 22, 33]


0 commentaires