मैं एक विशेष चरित्र में टूटकर एक स्ट्रिंग कैसे विभाजित कर सकता हूं?


533

मेरे पास यह तार है

'john smith~123 Street~Apt 4~New York~NY~12345'

जावास्क्रिप्ट का उपयोग करना, इसे पार्स करने का सबसे तेज़ तरीका क्या है

var name = "john smith";
var street= "123 Street";
//etc...

जवाबों:


845

जावास्क्रिप्ट के String.prototype.splitसमारोह के साथ:

var input = 'john smith~123 Street~Apt 4~New York~NY~12345';

var fields = input.split('~');

var name = fields[0];
var street = fields[1];
// etc.

51

आपको jQuery की आवश्यकता नहीं है

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];

53
आपको इस सरल प्रतिस्थापन में रेगेक्स जोड़ने की आवश्यकता नहीं है। यह केवल अगर यह कुछ भी धीमी कर देगा। आप इसे एक साधारण स्ट्रिंग प्रतिस्थापित करने के लिए उद्धरण चिह्नों में बदल सकते हैं।
अनीश गुप्ता

47

ECMAScript6 के अनुसार ES6, स्वच्छ तरीका सरणियों को नष्ट कर रहा है:

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, unit, city, state, zip] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(unit); // Apt 4
console.log(city); // New York
console.log(state); // NY
console.log(zip); // 12345

आपके पास इनपुट स्ट्रिंग में अतिरिक्त आइटम हो सकते हैं। इस स्थिति में, आप बाकी के लिए एक सरणी प्राप्त करने के लिए रेस्ट ऑपरेटर का उपयोग कर सकते हैं या बस उन्हें अनदेखा कर सकते हैं:

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, ...others] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(others); // ["Apt 4", "New York", "NY", "12345"]

मुझे मूल्यों के लिए केवल-पढ़ने के लिए संदर्भ चाहिए और constघोषणा का उपयोग किया ।

ES6 का आनंद लें!


6
आप किसी आइटम को छोड़ भी सकते हैं:const [name, , unit, ...others] = ...
Sallar

16

हालांकि यह सबसे सरल तरीका नहीं है, आप यह कर सकते हैं:

var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
    keys = "name address1 address2 city state zipcode".split(" "),
    address = {};

// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
    address[ keys.unshift() ] = match;
});

// address will contain the mapped result
address = {
    address1: "123 Street"
    address2: "Apt 4"
    city: "New York"
    name: "john smith"
    state: "NY"
    zipcode: "12345"
}

ES2015 के लिए अद्यतन, विनाशकारी का उपयोग कर

const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);

// The variables defined above now contain the appropriate information:

console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345

4
पहले हमारे पास '~' संकेतों और एक सरणी के द्वारा अलग स्ट्रिंग है keys। दूसरा बदला हुआ फ़ंक्शन [^~]+प्रत्येक अलग-अलग भाग (यानी '123 स्ट्रीट', 'Apt 4', आदि) से मेल खाने के लिए उपयोग कर रहा है और प्रत्येक भाग के लिए फ़ंक्शन को तर्क के रूप में कहता है। प्रत्येक रन पर, फ़ंक्शन कुंजियों के सरणी से पहली कुंजी लेता है (यह भी Array.unshift का उपयोग करके इसे हटाता है) और कुंजी और भाग को एड्रेस ऑब्जेक्ट को असाइन करता है।
ईविनो

13

आप जावास्क्रिप्ट की जांच करने के लिए चाहता हूँ substr या विभाजन , के रूप में यह वास्तव में jQuery के लिए अनुकूल एक कार्य नहीं है।


5

अच्छा, सबसे आसान तरीका कुछ इस तरह होगा:

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]

5

यदि स्प्लिटर पाया जाता है तो ही

उसका विभाजन कर दो

वरना उसी तार को लौटाओ

function SplitTheString(ResultStr) {
    if (ResultStr != null) {
        var SplitChars = '~';
        if (ResultStr.indexOf(SplitChars) >= 0) {
            var DtlStr = ResultStr.split(SplitChars);
            var name  = DtlStr[0];
            var street = DtlStr[1];
        }
    }
}

4

कुछ इस तरह:

var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];

शायद सबसे आसान होने वाला है


2
नहीं, आप split("~")या तो चाहते हैं या split(/~/)नहीं split("/~/")। उत्तरार्द्ध केवल विभाजित होगा "John/~/Smith"और नहीं "John~Smith"
एंड्रयू विल्म्स

4

आप splitपाठ को विभाजित करने के लिए उपयोग कर सकते हैं ।

एक विकल्प के रूप में, आप matchअनुसरण के रूप में भी उपयोग कर सकते हैं

var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);

console.log(matches);
document.write(matches);

Regex [^~]+सभी वर्णों को मिलाएगा ~और मैचों को एक सरणी में लौटाएगा। फिर आप इसमें से मैच निकाल सकते हैं।


1
यह मेरे लिए काम किया! str.split();फ़ायरफ़ॉक्स में काम नहीं कर रहा था, लेकिन यह क्रोम और फ़ायरफ़ॉक्स दोनों में काम करता था।
संदीप


2

Zach का यह एक अधिकार था .. उसकी विधि का उपयोग करके आप एक "बहु-आयामी" सरणी बना सकते हैं .. मैंने JSFiddle http://jsfiddle.net/LcnvJ/2/ पर एक त्वरित उदाहरण बनाया।

// array[0][0] will produce brian
// array[0][1] will produce james

// array[1][0] will produce kevin
// array[1][1] will produce haley

var array = [];
    array[0] = "brian,james,doug".split(",");
    array[1] = "kevin,haley,steph".split(",");

2

जावास्क्रिप्ट: स्ट्रिंग स्ट्रिंग को ऐरे जावास्क्रिप्ट स्प्लिट में बदलें

    var str = "This-javascript-tutorial-string-split-method-examples-tutsmake."
 
    var result = str.split('-'); 
     
    console.log(result);
     
    document.getElementById("show").innerHTML = result; 
<html>
<head>
<title>How do you split a string, breaking at a particular character in javascript?</title>
</head>
<body>
 
<p id="show"></p> 
 
</body>
</html>

https://www.tutsmake.com/javascript-convert-string-to-array-javascript/


1

इससे string.split("~")[0];चीजें हो जाती हैं।

स्रोत: String.prototyp.split ()


करी और फ़ंक्शन संरचना का उपयोग करके एक और कार्यात्मक दृष्टिकोण।

तो पहली बात यह होगी कि विभाजित कार्य। हम इस बनाना चाहते "john smith~123 Street~Apt 4~New York~NY~12345"इस में["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

const split = (separator) => (text) => text.split(separator);
const splitByTilde = split('~');

तो अब हम अपने विशेष splitByTildeफ़ंक्शन का उपयोग कर सकते हैं । उदाहरण:

splitByTilde("john smith~123 Street~Apt 4~New York~NY~12345") // ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

पहला तत्व प्राप्त करने के लिए हम list[0]ऑपरेटर का उपयोग कर सकते हैं । चलो एक firstसमारोह बनाएँ :

const first = (list) => list[0];

एल्गोरिथ्म है: बृहदान्त्र द्वारा विभाजित और फिर दी गई सूची का पहला तत्व प्राप्त करें। इसलिए हम अपने अंतिम getNameकार्य के निर्माण के लिए उन कार्यों की रचना कर सकते हैं । के composeसाथ एक समारोह का निर्माण reduce:

const compose = (...fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value);

और अब इसका उपयोग रचना splitByTildeऔर firstकार्यों के लिए।

const getName = compose(first, splitByTilde);

let string = 'john smith~123 Street~Apt 4~New York~NY~12345';
getName(string); // "john smith"

1

सादा जावास्क्रिप्ट में प्रयास करें

 //basic url=http://localhost:58227/ExternalApproval.html?Status=1

 var ar= [url,statu] = window.location.href.split("=");

0

चूंकि अल्पविराम प्रश्न पर विभाजन को इस प्रश्न के साथ दोहराया गया है, इसलिए इसे यहां जोड़ा गया है।

आप एक चरित्र पर विभाजित है और यह भी अतिरिक्त व्हाइट कि उस चरित्र है, जो अक्सर अल्पविराम के साथ होता है का पालन कर सकते हैं हैंडल करना चाहते हैं, तो आप उपयोग कर सकते हैं replaceतो splitइस तरह,:

var items = string.replace(/,\s+/, ",").split(',')

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