Շատ հաճախ մեզ պետք է լինում ոչ միայն պարզել թե արդյո՞ք տեքստը պարունակում է այդ ենթատողը ու ո՞ր ինդեքսում է այն գտնվում, այլ նաև ստանալ այն և օգտագործել։ JavaScript-ը դրա համար ունի 3 ներդրված մեթոդ։ Փորձենք մանրամասն քննարկել այդ մեթոդները, և պարզել որն է նրանցից ամենաճկունը։ Եվ այսպես այդ մեթոդներն են՝
substring
substr
slice
Սկսենք substring
-ից։ Նախ տեսնենք թե MDN-ում ոնց է նկարագրվում տվյալ մեթոդը և ինչպես է այն աշխատում։ Գրելաձևը հետևյալն է՝
str.substring(start [,end]),
որտեղ․
start
-ն ամբողջ թիվ է, որը կարող է լինել 0-ից մինչև տեքստի երկարության չափ։ Այն ԸՆԴԳՐԿՎՈՒՄ Է արդյունքում ստացվելիք ենթատեքստի մեջ։end
-ը ոչ պարտադիր (օպցիոնալ) երկրորդ պարամետրն է։ Սա նույնպես ամբողջ թիվ է, որի տիրույթը կարող է լինել 0-ից մինչև տեքստի երկարության չափ։ Արդյունքում ստացվելիք ենթատեքստի մեջend
-ին համապատասխանող ինդեքսում գտնվող սիմվոլը ՉԻ ԸՆԴԳՐԿՎՈՒՄ։
Այսպիսով ՝
-
Եթե
start
արգումենտը հավասար էend
արգումենտին, ապաsubstring
մեթոդը կվերադարձնի դատարկ տող։ -
Եթե
end
արգումենտը բացակայում է, ապաsubstring
մեթոդը կառանձնացնիstart
-ից սկսած մինչև տեքստի վերջն ընկած ենթատեքստը։ -
Եթե արգումենտներից յուրաքանչյուրը փոքր է 0-ից, կամ հավասար է
NaN
-ի, ապա այն կընկալվի որպես հավասար 0-ի։ -
Եթե արգումենտներից յուրաքանչյուրը մեծ է տողի երկարության չափից, ապա այն կընկալվի որպես մաքսիմալ հնարավոր արժեքով՝ այսինքն տեքստի երկարության չափ։
-
Եթե
start
արգումենտը մեծ լինիend
արգումենտից, ապա մեթոդը կաշխատի այնպես, ասես թե արգումենտները տեղերով փոխված են։ Օրինակ՝str.substring(1, 0) === str.substring(0, 1)
։
Այժմ դիտարկենք մի քանի օրինակներ․
let str = "Armenian JavaScript Community";
console.log(str.substring(0, 3)); // "Arm"
console.log(str.substring(3, 0)); // "Arm"
Վերևի օրինակի երկու դեպքում էլ կստանանք "Arm" ենթատեքստը։
console.log(str.substring(9, 19)); // "JavaScript"
console.log(str.substring(19, 9)); // "JavaScript"
Այս երկու դեպքն էլ կվերադարձնի "JavaScript" ենթատեքստը։
Հաջորդը՝ substr
մեթոդն է։ Կրկին դիմենք MDN-ի օգնությանը պարզելու համար թե ինչպես է այն աշխատում։ Գրելաձևը հետևյալն է՝
str.substr(start [,length])
, որտեղ․
-
start
- Դիրքն է, որտեղից սկսած «առանձնացնելու» է սիմվոլները։ Բնականաբար պետք է լինի ամբողջ թիվ։ Եթե տրված է բացասական թիվ, ապա այն ընկալվում է որպես(str.length - start)
, որտեղstr.length
-ը տեքստի երկարությունն է։ -
length
- Ոչ պարտադիր երկրորդ պարամետրն է։ Այն ցույց է տալիս թե քանի սիմվոլ ենք մենք ուզում ստանալ։ Մեթոդը վերադարձնում է նոր տեքստ՝ բաղկացած հին տեքստի այն մասից, որը մենք «կտրել» ենք տրված արգումենտների օգնությամբ։
Այսպիսով՝
- Եթե
start
արգումենտը դրական թիվ է, և այն մեծ կամ հավասար է տեքստի երկարությանը, ապա մեթոդը վերադարձնում է դատարկ տող։ - Եթե
start
արգումենտը լինի բացասական թիվ, ապաsubstr
մեթոդը կօգտագործի նրան, հաշվարկը կատարելով տեքստի վերջից։ Եթե բացի նրանից որ բացասական լինի, նաև մոդուլով մեծ լինի տեքստի երկարությունից, ապա կընկալվի որպես 0։
start
արգումենտի բացասական լինելը նորմալ է JavaScript-ի, բայց ոչ ECMAScript-262-ի մյուս հայտնի ռեալիզացիա JScript (JavaScripti-ի Microsofti-ի տարբերակը)-ի մոտ։
- Եթե
length
արգումենտը 0 կամ բացասական թիվ է, ապա մեթոդը կվերադարձնի դատարկ տող։ Եթե այն բացակայում է, ապա մեթոդը կվերադարձնի սկսածstart
-ից մինչև տողի վերջ եղած ենթատողը։
Ահա մի քանի օրինակներ ՝
const str = "Armenian JavaScript Community";
console.log(str.substr(9, 20)); // "JavaScript Community"
console.log(str.substr(-9, 10)); // "Community"
Եվ իհարկե վերջին և ամենակարևոր մեթոդը՝ slice-ը։ Գրելաձևը հետևյալն է՝
str.slice(start [,end])
;
Որտեղ՝
-
start
- Ինդեքսն է, որտեղից պետք է սկսել հաշվարկը։ Եթե այն բացասական է, ապա կընկալվի որպեսstr.length + start
, որտեղstr.length
-ը դա տեքստի երկարությունն է։ -
end
- Ոչ պարտադիր երկրորդ պարամետրն է։ Այս պարամետրով տալիս ենք թե մինչև որտեղ ենք ուզում մեթոդի օգնությամբ ենթատեքստը առանձնացնել։ Եթե այն բաց թողենք, ապա մեթոդը կառանձնացնիstart
-ից սկսած մինչև տեքստի վերջ։ Եթե այն բացասական թիվ է, ապա ընկալվում է որպեսstr.length + end
, որտեղstr.length
-ը տողի երկարությունն է։
slice
մեթոդը վերադարձնում է ենթատեքստը, որը սկսվում է տողի start
ինդեքսին պատկանող սիմվոլից և վերջանում է
end
ինդեքսի մոտ (end ինդեքսին պատկանող սիմվոլը ՉԻ ԸՆԴԳՐԿՎՈՒՄ վերադարձվող ենթատողի մեջ)։ Բերենք մի քանի օրինակներ՝
let str = "Armenian JavaScript Community";
console.log(str.slice(0, 8)); // "Armenian"
console.log(str.slice(8, 19)); // "JavaScript"
console.log(str.slice(9, -10)); // "JavaScript"
Կարևոր է հիշել, որ String
տիպը JavaScript
-ում ՉԻ ԿԱՐՈՂ ՓՈՓՈԽՄԱՆ ԵՆԹԱՐԿՎԵԼ։ Այն ինչպես ստեղծեցինք, այնպես էլ ընդմիշտ կմնա։ Բոլոր այս 3 մեթոդները ՎԵՐԱԴԱՐՁՆՈՒՄ ԵՆ ՆՈՐ String
, և ՓՈՓՈԽՈՒԹՅԱՆ ՉեՆ ԵՆԹԱՐԿՈՒՄ ՀԻՆԸ։ Հավանաբար կարող է հարց առաջանալ, թե այս մեթոդներից որն օգտագործել, որն է այն մեթոդը, որն ունիվերսալ է և ճկուն, համեմատած մնացած մեթոդների հետ։
Իհարկե slice
-ը։ Թեև substr
-ը նույնպես հրաշալի մեթոդ է, և որոշ դեպքերում կարող է հարմար լինել, այն ունի մեկ թերություն՝ նկարագրված չէ ECMAScript ստանդարտում և ստեղծվել է բրաուզերային միջավայրում կիրառելու համար։ Այսինքն կա հավանականություն, որ ոչ բրաուզերային միջավայրում այն կարող է չաջակցվել։
slice
-ն ավելի կարճ է, ճկուն, և բոլոր միջավայրերում հրաշալի աշխատում է։ Այնպես որ կարիք չկա հիշելու մյուս երկուսի աշխատանքի սկզբունքները, իսկ եթե կարիք առաջանա էլ, կարող եք ուղղակի նայել այստեղ կամ MDN-ում։