উত্তর:
var str = 'abcdefghijkl';
console.log(str.match(/.{1,3}/g));
নোট: ব্যবহার করুন {1,3}পরিবর্তে মাত্র {3}স্ট্রিং লেন্থ যে 3 একাধিক যেমন হয় না জন্য বাকি অন্তর্ভুক্ত করা:
console.log("abcd".match(/.{1,3}/g)); // ["abc", "d"]
আরও কয়েকটি সূক্ষ্মতা:
. ক্যাপচার করবে না। /[\s\S]{1,3}/পরিবর্তে ব্যবহার করুন। (ধন্যবাদ @ মাইকে)match()আপনি nullযখন খালি অ্যারের আশা করছেন তখন ফিরে আসবে । সংযোজন করে এর বিরুদ্ধে সুরক্ষা দিন || []।সুতরাং আপনি এর সাথে শেষ করতে পারেন:
var str = 'abcdef \t\r\nghijkl';
var parts = str.match(/[\s\S]{1,3}/g) || [];
console.log(parts);
console.log(''.match(/[\s\S]{1,3}/g) || []);
[\s\S]পরিবর্তে .যাতে নতুন লাইনে ব্যর্থ না হয় ব্যবহার করুন ।
''.match(/.{1,3}/g) এবং খালি অ্যারের পরিবর্তে ''.match(/.{3}/g)ফিরে nullআসুন।
আপনি যদি নিয়মিত প্রকাশটি ব্যবহার করতে না চান ...
var chunks = [];
for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
chunks.push(str.substring(i, i + 3));
}
jsFizz ।
... নাহলে রেইগেক্স সমাধানটি বেশ ভাল :)
3পরামর্শ অনুসারে চলকটি যদি +1 হয় তবে আমি এটিকে পছন্দ করব । এটি একটি রেজিএক্সপ্রেস স্ট্রিংকে যুক্ত করার চেয়ে বেশি পঠনযোগ্য।
এই প্রশ্নের পূর্ববর্তী উত্তরগুলির উপর বিল্ডিং; নিম্নলিখিত ফাংশনটি অক্ষরের একটি স্ট্রিং ( str) এন-সংখ্যা ( size) বিভক্ত করবে ।
function chunk(str, size) {
return str.match(new RegExp('.{1,' + size + '}', 'g'));
}
(function() {
function chunk(str, size) {
return str.match(new RegExp('.{1,' + size + '}', 'g'));
}
var str = 'HELLO WORLD';
println('Simple binary representation:');
println(chunk(textToBin(str), 8).join('\n'));
println('\nNow for something crazy:');
println(chunk(textToHex(str, 4), 8).map(function(h) { return '0x' + h }).join(' '));
// Utiliy functions, you can ignore these.
function textToBin(text) { return textToBase(text, 2, 8); }
function textToHex(t, w) { return pad(textToBase(t,16,2), roundUp(t.length, w)*2, '00'); }
function pad(val, len, chr) { return (repeat(chr, len) + val).slice(-len); }
function print(text) { document.getElementById('out').innerHTML += (text || ''); }
function println(text) { print((text || '') + '\n'); }
function repeat(chr, n) { return new Array(n + 1).join(chr); }
function textToBase(text, radix, n) {
return text.split('').reduce(function(result, chr) {
return result + pad(chr.charCodeAt(0).toString(radix), n, '0');
}, '');
}
function roundUp(numToRound, multiple) {
if (multiple === 0) return numToRound;
var remainder = numToRound % multiple;
return remainder === 0 ? numToRound : numToRound + multiple - remainder;
}
}());
#out {
white-space: pre;
font-size: 0.8em;
}
<div id="out"></div>
আমার সমাধান (ES6 সিনট্যাক্স):
const source = "8d7f66a9273fc766cd66d1d";
const target = [];
for (
const array = Array.from(source);
array.length;
target.push(array.splice(0,2).join(''), 2));
আমরা এটি দিয়ে একটি ফাংশনও তৈরি করতে পারি:
function splitStringBySegmentLength(source, segmentLength) {
if (!segmentLength || segmentLength < 1) throw Error('Segment length must be defined and greater than/equal to 1');
const target = [];
for (
const array = Array.from(source);
array.length;
target.push(array.splice(0,segmentLength).join('')));
return target;
}
তারপরে আপনি পুনরায় ব্যবহারযোগ্য পদ্ধতিতে সহজেই ফাংশনটি কল করতে পারেন:
const source = "8d7f66a9273fc766cd66d1d";
const target = splitStringBySegmentLength(source, 2);
চিয়ার্স
const chunkStr = (str, n, acc) => {
if (str.length === 0) {
return acc
} else {
acc.push(str.substring(0, n));
return chunkStr(str.substring(n), n, acc);
}
}
const str = 'abcdefghijkl';
const splittedString = chunkStr(str, 3, []);
আরইজিএক্স ছাড়াই পরিষ্কার সমাধান
function chunk(er){
return er.match(/.{1,75}/g).join('\n');
}
উপরের ফাংশনটি হ'ল আমি বেস 64 চুনকিংয়ের জন্য যা ব্যবহার করি। এটি 75৫ টি অক্ষর তৈরি করবে।
replace(/.{1,75}/g, '$&\n')।
এখানে আমরা প্রতিটি স্ট্রিংয়ের সাথে প্রতিটি স্ট্রিংকে ছেদ করি:
export const intersperseString = (n: number, intersperseWith: string, str: string): string => {
let ret = str.slice(0,n), remaining = str;
while (remaining) {
let v = remaining.slice(0, n);
remaining = remaining.slice(v.length);
ret += intersperseWith + v;
}
return ret;
};
যদি আমরা উপরেরটি এর মতো ব্যবহার করি:
console.log(splitString(3,'|', 'aagaegeage'));
আমরা পেতে:
আগ | আগ | AEG | eag | ই
এবং এখানে আমরা একই কাজ করি তবে একটি অ্যারেতে চাপ দিন:
export const sperseString = (n: number, str: string): Array<string> => {
let ret = [], remaining = str;
while (remaining) {
let v = remaining.slice(0, n);
remaining = remaining.slice(v.length);
ret.push(v);
}
return ret;
};
এবং তারপরে এটি চালান:
console.log(sperseString(5, 'foobarbaztruck'));
আমরা পেতে:
['ফুবা', 'আরবাট', 'রাক']
যদি কেউ উপরের কোডটি সহজ করার কোনও উপায় জানেন, এলএমকে, তবে এটি স্ট্রিংয়ের জন্য ভাল কাজ করা উচিত।
নিয়মিত প্রকাশগুলি ব্যবহার না করেই কিছু পরিষ্কার সমাধান:
/**
* Create array with maximum chunk length = maxPartSize
* It work safe also for shorter strings than part size
**/
function convertStringToArray(str, maxPartSize){
const chunkArr = [];
let leftStr = str;
do {
chunkArr.push(leftStr.substring(0, maxPartSize));
leftStr = leftStr.substring(maxPartSize, leftStr.length);
} while (leftStr.length > 0);
return chunkArr;
};
ব্যবহারের উদাহরণ - https://jsfiddle.net/maciejsikora/b6xppj4q/ ।
আমি আমার সমাধানটি রেগএক্সপ্যাকের সাথে তুলনা করার চেষ্টা করেছি যা সঠিক উত্তর হিসাবে বেছে নেওয়া হয়েছিল। কিছু পরীক্ষা jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ এ পাওয়া যাবে । পরীক্ষাগুলি দেখিয়ে দিচ্ছে যে উভয় পদ্ধতিরই পারফরম্যান্স রয়েছে, সম্ভবত প্রথম দেখায় রেজিএক্সপ সলিউশনটি কিছুটা দ্রুত হয় তবে আপনি নিজে বিচার করুন।
সাথে .split:
var arr = str.split( /(?<=^(?:.{3})+)(?!$)/ ) // [ 'abc', 'def', 'ghi', 'jkl' ]
এবং .replaceহবে:
var replaced = str.replace( /(?<=^(.{3})+)(?!$)/g, ' || ' ) // 'abc || def || ghi || jkl'
/(?!$)/শেষ হওয়ার আগে থামতে হয় /$/, ছাড়া হয়:
var arr = str.split( /(?<=^(?:.{3})+)/ ) // [ 'abc', 'def', 'ghi', 'jkl' ] // I don't know why is not [ 'abc', 'def', 'ghi', 'jkl' , '' ], comment?
var replaced = str.replace( /(?<=^(.{3})+)/g, ' || ') // 'abc || def || ghi || jkl || '
গোষ্ঠী উপেক্ষা /(?:... এর )/দরকার নেই .replaceতবে .splitগোষ্ঠীগুলিকে যুক্ত করতে যোগ করা হচ্ছে:
var arr = str.split( /(?<=^(.{3})+)(?!$)/ ) // [ 'abc', 'abc', 'def', 'abc', 'ghi', 'abc', 'jkl' ]
এটি নিয়মিত প্রকাশ বা স্পষ্ট লুপ ছাড়া এটি করার একটি উপায়, যদিও এটি একটি লাইনারের সংজ্ঞাটি কিছুটা প্রসারিত করে:
const input = 'abcdefghijlkm';
// Change `3` to the desired split length.
const output = input.split('').reduce((s, c) => {let l = s.length-1; (s[l] && s[l].length < 3) ? s[l] += c : s.push(c); return s;}, []);
console.log(output); // output: [ 'abc', 'def', 'ghi', 'jlk', 'm' ]
এটি স্ট্রিংকে স্বতন্ত্র অক্ষরের অ্যারেতে বিভক্ত Array.reduceকরে প্রতিটি অক্ষরের উপরে পুনরাবৃত্তি করে কাজ করে। সাধারণত reduceএকটি একক মান ফেরত দেয়, তবে এক্ষেত্রে একক মানটি একটি অ্যারে হিসাবে ঘটে এবং আমরা প্রতিটি অক্ষরের উপর দিয়ে যাওয়ার সাথে সাথে আমরা এটিকে অ্যারের শেষ আইটেমের সাথে যুক্ত করি। অ্যারেতে থাকা শেষ আইটেমটি লক্ষ্য দৈর্ঘ্যে পৌঁছে গেলে আমরা একটি নতুন অ্যারে আইটেম যুক্ত করি।
আলোচনার পরে একটু পরে আসছি তবে এখানে একটি ভিন্নতা যা স্ট্রিং + অ্যারে পুশের চেয়ে কিছুটা দ্রুত।
// substring + array push + end precalc
var chunks = [];
for (var i = 0, e = 3, charsLength = str.length; i < charsLength; i += 3, e += 3) {
chunks.push(str.substring(i, e));
}
লুপের অংশ হিসাবে শেষের মানটি প্রাক-গণনা করা স্ট্রিংয়ের অভ্যন্তরে ইনলাইন গণিত করার চেয়ে দ্রুত। আমি এটি ফায়ারফক্স এবং ক্রোম উভয়তেই পরীক্ষা করেছি এবং তারা উভয়ই গতি দেখায়।
আপনি এটি এখানে চেষ্টা করতে পারেন