2009-11-20 5 views
39

tengo una cadena: "El rápido zorro marrón salta sobre los perros vagos."¿Cómo puedo insertar un carácter después de cada n caracteres en javascript?

Quiero usar javascript (posiblemente con jQuery) para insertar un carácter cada n caracteres. Por ejemplo, yo quiero llamar a:

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.$" 

El objetivo es utilizar esta función para insertar &shy en cadenas largas que les permita envolver. Tal vez alguien sabe de una mejor manera?

+0

Es mejor dejar que el ajuste de texto del navegador. ¿Tiene oraciones largas como las que usó para su ejemplo anterior, o palabras largas? –

+1

El navegador no se ajustará dentro de una palabra, no tengo palabras largas como "ThisIsAStupidLabelThatOneOfMyUsersWillTryToMakeInMyApplication" – brendan

+0

No sería una solución de servidor para dividir las palabras en un máximo de n caracteres sería mejor? – Pool

Respuesta

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, pero sus puntos y comas son un poco dentro y fuera;) –

+0

@Andy E: je, son opcionales justo antes de un cierre ''}. Ni siquiera me doy cuenta de que ya lo hago. Nace de una mentalidad de "debe conservarse cada byte" desde años antes de que los compresores js se convirtieran en estándar;) –

+0

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

106

Con expresiones regulares

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

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

aplausos,

+8

Maldita sea! Buen regex-fu allí. BTW es el último '$' necesario en la cadena de reemplazo? –

+2

El último ** $ ** en la cadena de reemplazo no es necesario, puede poner lo que quiera poner en el intervalo de 5 espacios aquí, como **
** por ejemplo. – skymook

+4

yo llegamos a '.replace "cadena"(/ {5}/g, "$ &" + "
".);'. La concatenación al final solo es para facilitar la lectura. '$ &' en el reemplazo coincide con la cadena coincidente, por lo que no se requiere agrupación. – 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

Intenta explicar tu respuesta – Coder

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

Explicar: split ('') convierte una cadena en una matriz. Ahora queremos volver la matriz a una sola cadena. Reducir es perfecto en este escenario. La función de reducción de matriz toma 3 parámetros, primero es el acumulador, el segundo es el elemento iterado y el tercero es el índice. Como el índice de matriz está basado en 0, para insertar después del 5to, estamos viendo el índice i% 5 === 4.

0

En algún momento también debe comenzar a insertar caracteres desde el final de la cadena hasta el principio. En ese caso, esto puede hacer:

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); 
} 

Resultado:

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