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";
9 Réponses :
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);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,yzPendant 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
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)Je pense que c'est le moyen le plus simple:
const str = "abcdefghijklmnopqrstuvwxyz"
const result = str.replaceAll(/(.{3})/g, '$1 ')
console.log(result)
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
output = "abcdefghijklmnopqrstuvwxyz".replace(/(.{3})/g, '$1 ')
console.log(output)
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
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)
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);
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,yzSolution 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
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 :))