मैं केवल एक बार एक स्ट्रिंग को कैसे विभाजित कर सकता हूं, अर्थात इसे 1|Ceci n'est pas une pipe: | Oui
पार्स टू ["1", "Ceci n'est pas une pipe: | Oui"]
:?
विभाजन की सीमा में मदद नहीं लगती ...
मैं केवल एक बार एक स्ट्रिंग को कैसे विभाजित कर सकता हूं, अर्थात इसे 1|Ceci n'est pas une pipe: | Oui
पार्स टू ["1", "Ceci n'est pas une pipe: | Oui"]
:?
विभाजन की सीमा में मदद नहीं लगती ...
जवाबों:
यह एक सुंदर दृष्टिकोण नहीं है, लेकिन सभ्य दक्षता के साथ काम करता है:
var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]);
components.splice(0,2).slice(0,2)
आप String.indexOf('|')
'|' की पहली घटना का सूचकांक प्राप्त करने के लिए उपयोग करना चाहेंगे ।
var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
+1
वास्तव में विभाजक स्ट्रिंग की लंबाई होनी चाहिए, अगर एक से अधिक वर्ण हों।
var i = s.split('|',2).join('|').length;//2nd index
var splits = [s.slice(0,i).split('|'), s.slice(i+1)];
आप उपयोग कर सकते हैं:
var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
रेगेक्स स्ट्रिंग को दो मिलान समूहों (कोष्ठक) में विभाजित करता है, पहले वाला पाठ | और पाठ के बाद। फिर, हम shift
पूरे स्ट्रिंग मैच ( splits[0]
) से छुटकारा पाने के लिए परिणाम ।
एक लाइनर और इमो, सरल:
var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');
यह "मैं सुपर कूल हूँ। हाँ!"
ES6 सिंटैक्स एक अलग दृष्टिकोण की अनुमति देता है:
function splitOnce(s, on) {
[first, ...rest] = s.split(on)
return [first, rest.length > 0? rest.join(on) : null]
}
जो |
रिक्त स्ट्रिंग के बजाय नल द्वारा लौटने से स्ट्रिंग की स्थिति को संभालती है , जो अधिक स्पष्ट है।
splitOnce("1|Ceci n'est pas une pipe: | Oui", "|")
>>> ["1", "Ceci n'est pas une pipe: | Oui"]
splitOnce("Celui-ci n'a pas de pipe symbol!", "|")
>>> ["Celui-ci n'a pas de pipe symbol!", null]
पास डे पाइप? C'est null!
मैंने इस उत्तर को मुख्य रूप से जोड़ा ताकि मैं पाइप के प्रतीक पर एक वाक्य बना सकूं, लेकिन es6 सिंटैक्स को दिखाने के लिए भी - यह आश्चर्यजनक है कि कितने लोग अभी भी इसका उपयोग नहीं करते हैं ...
यदि स्ट्रिंग में सीमांकक शामिल नहीं है @ NickCraver का समाधान अभी भी दो तत्वों की एक सरणी लौटाएगा, दूसरा एक खाली स्ट्रिंग है। मैं उस विभाजन से मेल खाने वाले व्यवहार को पसंद करता हूं। यही है, अगर इनपुट स्ट्रिंग में सीमांकक शामिल नहीं है, तो एक तत्व के साथ केवल एक सरणी वापस आ जाएगी।
var splitOnce = function(str, delim) {
var components = str.split(delim);
var result = [components.shift()];
if(components.length) {
result.push(components.join(delim));
}
return result;
};
splitOnce("a b c d", " "); // ["a", "b c d"]
splitOnce("a", " "); // ["a"]
एक वैकल्पिक, संक्षिप्त दृष्टिकोण, जो सामान कहीं और है, के अलावा replace()
अपने लाभ के लिए सीमा का उपयोग करना है।
var str = "1|Ceci n'est pas une pipe: | Oui";
str.replace("|", "aUniquePhraseToSaySplitMe").split("aUniquePhraseToSaySplitMe");
जैसा कि @sreservoir टिप्पणियों में बताती है, अद्वितीय वाक्यांश वास्तव में अद्वितीय होना चाहिए - यह उस स्रोत में नहीं हो सकता है जिसे आप इस विभाजन को चला रहे हैं, या आप जितना चाहें उससे अधिक टुकड़ों में स्ट्रिंग विभाजन प्राप्त करेंगे। एक अनुचित चरित्र, जैसा कि वह कहता है, यदि आप इसे उपयोगकर्ता इनपुट (यानी, एक ब्राउज़र में टाइप किया गया) के खिलाफ चला रहे हैं, तो कर सकते हैं।
यह थोड़ा लंबा है, लेकिन यह काम करता है जैसे मेरा मानना है कि सीमा होनी चाहिए:
function split_limit(inString, separator, limit){
var ary = inString.split(separator);
var aryOut = ary.slice(0, limit - 1);
if(ary[limit - 1]){
aryOut.push(ary.slice(limit - 1).join(separator));
}
return aryOut;
}
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 1));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 2));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 3));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 7));
https://jsfiddle.net/2gyxuo2j/
शून्य की सीमा में अजीब परिणाम मिलते हैं, लेकिन दक्षता के नाम पर मैंने इसके लिए चेक छोड़ दिया। आप इसे फ़ंक्शन की पहली पंक्ति के रूप में जोड़ सकते हैं यदि आपको इसकी आवश्यकता है:
if(limit < 1) return [];
यदि आप "पाइपलाइन" का उपयोग करना चाहते हैं, reduce
तो आपका मित्र है
const separator = '|'
jsonNode.split(separator)
.reduce((previous, current, index) =>
{
if (index < 2) previous.push(current)
else previous[1] += `${separator}${current}`
return previous
}, [])
.map((item: string) => (item.trim()))
.filter((item: string) => (item != ''))
अधिक प्रभावी तरीका:
const str = "1|Ceci n'est pas une pipe: | Oui"
const [head] = str.split('|', 1);
const result = [head, str.substr(head.length + 1)]
console.log(result);
जावास्क्रिप्ट नियमित अभिव्यक्ति कार्यक्षमता का उपयोग करें और पहले कैप्चर किए गए अभिव्यक्ति को लें।
आरई शायद की तरह दिखेगा /^([^|]*)\|/
।
वास्तव में, आपको केवल तभी आवश्यकता होती है /[^|]*/
जब आप यह सत्यापित करते हैं कि स्ट्रिंग को इस तरह से स्वरूपित किया गया है, जावास्क्रिप्ट regex लालिमा के कारण।