दिए गए इंडेक्स पर दो में स्ट्रिंग विभाजित करें और दोनों हिस्सों को वापस करें


83

मेरे पास एक स्ट्रिंग है जिसे मुझे दिए गए इंडेक्स पर विभाजित करने की आवश्यकता है और फिर दोनों हिस्सों को लौटाएं, अल्पविराम द्वारा अलग किया गया। उदाहरण के लिए:

string: 8211 = 8,211
        98700 = 98,700

इसलिए मुझे किसी भी इंडेक्स पर स्ट्रिंग को विभाजित करने में सक्षम होने की आवश्यकता है और फिर स्ट्रिंग के दोनों हिस्सों को वापस करें। विभाजित करने के लिए तरीकों से निर्मित प्रतीत होता है, लेकिन विभाजन के केवल एक भाग को वापस करते हैं।

string.slice स्ट्रिंग के निकाले गए हिस्से को ही लौटाता है। string.split आपको केवल वर्ण पर विभाजित करने की अनुमति देता है अनुक्रमणिका पर नहीं। string.substring करता है कि मुझे क्या चाहिए लेकिन केवल स्ट्रिंग स्ट्रिंग को लौटाता है। बहुत ही समान - फिर भी केवल विकल्प को लौटाता है


2
क्या आप अपेक्षित आउटपुट दिखा सकते हैं?
— रोहन कुमार

2
split()जैसा कि आप निस्संदेह जानते हैं, स्ट्रिंग्स की एक सरणी देता है। कृपया वह कोड शामिल करें जो आपके लिए काम नहीं करता है।
— विम ओमबेलेट्स

क्या यह सिर्फ हजार विभाजक नहीं है?
— जेक

क्या आप वास्तव में विभाजित करना चाहते हैं, या बस हजारों विभाजक डालें। यदि यह केवल उत्तरार्द्ध है, तो आप यह कोशिश कर सकते हैं var n='1234567890'; alert(n.replace(/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g,'$&,'));:। Ref: safaribooksonline.com/library/view/ अनियमित-expressions
— cookbook

कृपया आगे
— बढ़ें

जवाबों:


107

इसे इस्तेमाल करे

function split_at_index(value, index)
{
 return value.substring(0, index) + "," + value.substring(index);
}

console.log(split_at_index('3123124', 2));


17
2 भागों के लिए पूछा गया प्रश्न। क्या आपको नहीं लौटना चाहिए [value.substring(0, index) ,value.substring(index)]?
— मन्नोजो


3

आप आसानी से कई अनुक्रमित पर विभाजित करने के लिए, और एक सरणी या स्ट्रिंग लेने के लिए इसका विस्तार कर सकते हैं

const splitOn = (slicable, ...indices) =>
  [0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

splitOn('foo', 1);
// ["f", "oo"]

splitOn([1, 2, 3, 4], 2);
// [[1, 2], [3, 4]]

splitOn('fooBAr', 1, 4);
//  ["f", "ooB", "Ar"]

लॉश इश्यू ट्रैकर: https://github.com/lodash/lodash/issues/3014



1

कुछ इस तरह?...

 function stringConverter(varString, varCommaPosition)
 {
   var stringArray = varString.split("");
   var outputString = '';
   for(var i=0;i<stringArray.length;i++)
   {
     if(i == varCommaPosition)
      {
        outputString = outputString + ',';
      }

     outputString = outputString + stringArray[i];
   }  

   return outputString;
 }

1

आप इसे इस तरह से भी कर सकते हैं।
https://jsfiddle.net/Devashish2910/8hbosLj3/1/#&tatelyjs=iugeGcColp

var str, result;
str = prompt("Enter Any Number");

var valueSplit = function (value, length) {
    if (length < 7) {
        var index = length - 3;
        return str.slice(0, index) + ',' + str.slice(index);
    }
    else if (length < 10 && length > 6) {
        var index1, index2;
        index1 = length - 6;
        index2 = length - 3;
        return str.slice(0,index1) + "," + str.slice(index1,index2) + "," + str.slice(index2);
    }
}

result = valueSplit(str, str.length);
alert(result);

0

यदि कोड लालित्य regex के प्रदर्शन हिट से अधिक है, तो

'1234567'.match(/^(.*)(.{3})/).slice(1).join(',')
=> "1234,567"

रेगेक्स को और अधिक सटीक होने के लिए संशोधित करने के लिए बहुत अधिक जगह है।

यदि join()काम नहीं करता है, तो आपको mapएक बंद करने के साथ उपयोग करने की आवश्यकता हो सकती है , जिस बिंदु पर यहां अन्य उत्तर कम बाइट्स और लाइन शोर हो सकते हैं।


0
function splitText(value, index) {
  if (value.length < index) {return value;} 
  return [value.substring(0, index)].concat(splitText(value.substring(index), index));
}
console.log(splitText('this is a testing peace of text',10));
// ["this is a ", "testing pe", "ace of tex", "t"] 

उन लोगों के लिए जो इंडेक्स का उपयोग करके एक टेक्स्ट को सरणी में विभाजित करना चाहते हैं।


0

यदि आप नियमित रूप से भाव और प्रक्षेपित स्ट्रिंग्स का उपयोग करके वास्तव में हैकी वन-लाइनर चाहते हैं ...

const splitString = (value, idx) => value.split(new RegExp(`(?<=^.{${idx}})`));
console.log(splitString('abcdefgh', 5));

यह कोड कहता है कि रेगेक्स में दिए गए मान को बदलकर स्ट्रिंग को विभाजित करें। रेगेक्स एक स्थिति देता है, एक चरित्र नहीं, इसलिए हम प्रारंभिक स्ट्रिंग में पात्रों में नहीं खोते हैं। यह जिस तरह से करता है वह स्थिति को एक लुक-बैक और ^एंकर के माध्यम से ढूंढ रहा है , जहां indexस्ट्रिंग की शुरुआत से वर्ण थे ।


अंत से हर तीसरे स्थान पर अल्पविराम जोड़ने की अपनी प्रस्तावित समस्या को हल करने के लिए, रेगेक्स थोड़ा अलग होगा और हम विभाजन के बजाय प्रतिस्थापित का उपयोग करेंगे।

const values = [ 8211, 98700, 1234567890 ];
const addCommas = (value, idx) => value.replace(new RegExp(`(?=(.{${idx}})+$)`, 'g'), ',');

console.log(values.map(v => addCommas(v.toString(), 3)));

यहाँ हम idxएक लुक-फ़ॉरवर्ड और $एंकर का उपयोग करके अंत से वें स्थान को ढूंढते हैं, लेकिन हम अंत से उन पदों की संख्या को भी कैप्चर करते हैं। तब हम स्थिति को अल्पविराम से बदल देते हैं। हम gध्वज (वैश्विक) का उपयोग करते हैं, इसलिए यह हर घटना को प्रतिस्थापित करता है, न कि केवल पहले पाया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.