1
votes

JavaScript - Ajouter des délimiteurs à une chaîne

J'essaie de trouver un moyen d'ajouter une forme de délimiteur à une longue chaîne en Javascript. Par exemple, si j'ai une chaîne de 26 caractères (voir ci-dessous), y a-t-il un moyen pour moi d'ajouter un espace ou une virgule après chaque x (disons dans ce cas, tous les 3) nombre de caractères dans cette chaîne. Résultat attendu: "abc def ghi jkl mno pqr stu vwx yz"

var str = "abcdefghijklmnopqrstuvwxyz";


1 commentaires

Veuillez montrer un code que vous avez essayé pour prouver que vous avez essayé. C'est l'une des règles de StackOverflow. En savoir plus ici idownvotedbecau.se/noattempt (je n'ai pas voté contre, c'est juste le nom du site :))


9 Réponses :


0
votes

var str = "abcdefghijklmnopqrstuvwxyz";
var ary = [];
for(i = 0, len = str.length; i < len; i += 3) {
   ary.push(str.substr(i, 3))
}
const output = ary.join(' ');
console.log(output);


0 commentaires

0
votes

EDIT : enveloppé dans une fonction

Cela peut être fait en utilisant regex (vous pouvez remplacer le 3 par un autre nombre ou le changer en une variable en utilisant $ {aNumber} pour changer la taille des morceaux

var str = "abcdefghijklmnopqrstuvwxyz";

const delimit = (text, chunkSize, delimiter) => text.match(new RegExp(`.{1,${chunkSize}}`, 'g')).join(delimiter);

console.log(delimit(str, 3, ' ')); //output abc,def,ghi,jkl,mno,pqr,stu,vwx,yz


3 commentaires

Pendant que votre modification fonctionne, vous avez toujours oublié d'utiliser les variables que vous avez passées dans la fonction à l'intérieur de la fonction.


Oui, mis à jour. Désolé j'ai oublié de le passer :(


Voir ma suggestion de modification, vous avez oublié d'utiliser chunkSize et text



0
votes

Utilisez .match () avec une expression régulière, puis joignez les valeurs ensemble à l'aide d'un espace.

let str = "abcdefghijklmnopqrstuvwxyz";
// use regex to match
let newStr = str.match(/.{1,3}/g);
// join the arrray values back to string but add a space at each values beginning
let joined = newStr.join(" ");
console.log(joined)


0 commentaires

1
votes

Je pense que c'est le moyen le plus simple:

const str = "abcdefghijklmnopqrstuvwxyz"
const result = str.replaceAll(/(.{3})/g, '$1 ')

console.log(result)


2 commentaires

Vous pouvez utiliser la chaîne "abcdefghijklmnopqrstuvwxyz" place, afin qu'elle reste cohérente avec la question et le reste des solutions.


@Samathingamajig mon mal, désolé pour ça



-1
votes

output = "abcdefghijklmnopqrstuvwxyz".replace(/(.{3})/g, '$1 ')
console.log(output)


2 commentaires

Pourquoi dites-vous spécifiquement pour correspondre à tous les caractères sauf pour une virgule , ? Et cette sortie ne répond pas à la demande de l'OP, elle sort avec des virgules au lieu d'espaces.


Eh bien, j'ai oublié de modifier la solution après l'avoir testée avec succès. Merci. Nous n'avons pas besoin de [^,]. Et vous savez, vous pouvez remplacer le ',' par un espace



0
votes

Un moyen simple de le faire est de convertir la chaîne en tableau et inversement

    var str = "abcdefghijklmnopqrstuvwxyz";

    var strArr = str.split('')

    var newStr =  '', x = 0;

    for(let i = 0; i < strArr.length; i++){    

        

        if(x < 3){
            newStr += strArr[i]
            x +=1;
            
        }
        if (x == 3) {
            newStr += " "
            x = 0;
            
        }
    }

    console.log(newStr)


0 commentaires

0
votes

Peut utiliser la méthode suivante pour séparer la chaîne par 3 caractères:

abc def ghi jkl mno pqr stu vwx yz

Cette réponse imprimée comme suit:

var str = 'abcdefghijklmnopqrstuvwxyz';
var arr=str.match(/.{1,3}/g);
var newString=arr.join(" ");
console.log(newString);

ou

"abc def ghi jkl mno pqr stu vwx yz "

Cette réponse imprimée comme suit:

var str = 'abcdefghijklmnopqrstuvwxyz';
var arr=str.match(/.{1,3}/g);
var newString="";
arr.forEach(element => newString+=element+" ");
console.log(newString);


0 commentaires

0
votes

Je suis d'accord avec la solution regEx la plus simple et la plus évidente. Mais il y a aussi, juste au cas où, plutôt à des fins pédagogiques, une approche fonctionnelle:

const str = "abcdefghijklmnopqrstuvwxyz";

const s = str.split('')
             .map((x,i) => (i % 3 - 2 == 0) ? x + ',' : x)
             .join('');

console.log(s) // abc,def,ghi,jkl,mno,pqr,stu,vwx,yz


0 commentaires

0
votes

Solution classique via une fonction récursive:

var str = 'abcdefghijklmnopqrstuvwxyz';

function add_delimiters(s, n, d) {
  return (s.length > n)
    ? s.slice(0, n) + d + add_delimiters(s.slice(n, s.length), n, d)
    : s;
}

console.log(add_delimiters(str, 3, ',')); // abc,def,ghi,jkl,mno,pqr,stu,vwx,yz


0 commentaires