2009-11-20 6 views
39

J'ai une chaîne: "Le renard brun rapide saute par-dessus les chiens paresseux."Comment puis-je insérer un caractère après tous les n caractères en javascript?

Je veux utiliser javascript (éventuellement avec jQuery) pour insérer un caractère tous les n caractères. Par exemple, je veux appeler:

var s = "The quick brown fox jumps over the lazy dogs."; 
var new_s = UpdateString("$",5); 
// new_s should equal "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs.$" 

L'objectif est d'utiliser cette fonction pour insérer &shy dans des chaînes longues pour leur permettre d'envelopper. Peut-être que quelqu'un sait d'une meilleure façon?

+0

Vous êtes mieux de laisser le texte wrap du navigateur. Avez-vous de longues phrases comme vous l'avez utilisé pour votre exemple ci-dessus, ou de longs mots? –

+1

Le navigateur ne sera pas envelopper dans un mot, j'ai de longs mots comme "ThisIsAStupidLabelThatOneOfMyUsersWillTryToMakeInMyApplication" – brendan

+0

Ne serait pas une solution côté serveur pour casser les mots en un maximum de n caractères serait mieux? – Pool

Répondre

50
function chunk(str, n) { 
    var ret = []; 
    var i; 
    var len; 

    for(i = 0, len = str.length; i < len; i += n) { 
     ret.push(str.substr(i, n)) 
    } 

    return ret 
}; 

chunk("The quick brown fox jumps over the lazy dogs.", 5).join('$'); 
// "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs." 
+3

+1 mais vos points-virgules sont un peu on et off;) –

+0

@Andy E: heh, ils sont optionnels juste avant une fermeture '}'. Je ne réalise même plus que je fais ça. Il est né d'une mentalité "doit conserver chaque octet" des années avant que les compresseurs js ne deviennent standard;) –

+0

'String.split (" ")' & 'Array.form()' –

106

Avec regex

"The quick brown fox jumps over the lazy dogs.".replace(/(.{5})/g,"$1$") 

The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs.$ 

votre,

+8

Merde! Nice regex-fu là-bas. BTW est le dernier '$' nécessaire dans la chaîne de remplacement? –

+2

Le dernier ** $ ** dans la chaîne de remplacement n'est pas nécessaire, vous pouvez mettre ce que vous voulez mettre à l'intervalle de 5 espaces ici, comme **
** par exemple. – skymook

+4

Je suis arrivé à '" chaîne ".replace (/. {5}/g," $ & "+"
"); La concaténation à la fin est juste pour le rendre plus facile à lire. '$ &' dans le remplacement correspond à la chaîne correspondante, donc aucun regroupement n'est requis. – matpie

1
var str="ABCDEFGHIJKLMNOPQR"; 
function formatStr(str, n) { 
    var a = [], start=0; 
    while(start<str.length) { 
     a.push(str.slice(start, start+n)); 
     start+=n; 
    } 
    console.log(a.join(" ")); 
} 
formatStr(str,3); 
+0

Essayez d'expliquer votre réponse – Coder

1
let s = 'The quick brown fox jumps over the lazy dogs.'; 
s.split('').reduce((a, e, i)=> a + e + (i % 5 === 4 ? '$' : ''), ''); 

explique: split ('') transforme une chaîne de caractères dans un tableau. Maintenant, nous voulons retourner le tableau à une seule chaîne. Réduire est parfait dans ce scénario. La fonction de réduction de tableau prend 3 paramètres, le premier est l'accumulateur, le second est l'élément itéré et le troisième est l'index. Comme l'index du tableau est basé sur 0, insérer après le 5ème, nous regardons l'index i% 5 === 4.

0

Parfois, vous voulez également commencer à insérer des caractères de la fin de la chaîne au début. Dans ce cas, cela peut faire:

function insert_spaces(string, space_every_nr, reverse, character) { 
var insert_string = string.toString(); 

if (reverse == true) { 
    var insert_string = string.toString(); 
    var length_of_string=string.length; 
    var count=0; 
    for (var i = 0; i < string.length+count; i+=space_every_nr) { 
     insert_string=insert_string.substring(0,i)+character+insert_string.substring(i ,(string.length+count)); 
     count++; 
    } 
    return insert_string 
} else if(reverse ==false) { 
    var count=0; 
    var j=0; 
    for (var i = string.length; i > 0; i -= space_every_nr) { 
     insert_string=insert_string.substring(0,i)+character+insert_string.substring(i ,(string.length+count)); 
     count++; 
    } 
    return insert_string; 
    } 
} 
0
function addItemEvery (str, item, every){ 
    for(let i = 0; i < str.length; i++){ 
    if(!(i % (every + 1))){ 
     str = str.substring(0, i) + item + str.substring(i); 
    } 
    } 
    return str.substring(1); 
} 

Résultat:

> addItemEvery("The quick brown fox jumps over the lazy dogs.", '$', 5) 
> "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs." 
Questions connexes