जावास्क्रिप्ट कैसे विभाजित करने के लिए newline


102

मैं jquery का उपयोग कर रहा हूं, और मेरे पास एक textarea है। जब मैं अपने बटन को सबमिट करता हूं तो मैं प्रत्येक टेक्स्ट को न्यूलाइन द्वारा अलग कर देगा। जब एक नई पंक्ति है तो मेरे पाठ को कैसे विभाजित करें?

  var ks = $('#keywords').val().split("\n");
  (function($){
     $(document).ready(function(){
        $('#data').submit(function(e){
           e.preventDefault();
           alert(ks[0]);
           $.each(ks, function(k){
              alert(k);
           });
        });
     });
  })(jQuery);

उदाहरण इनपुट:

Hello
There

परिणाम मैं चाहता हूँ:

alert(Hello); and
alert(There)

जवाबों:


89

ksअपने सबमिट फंक्शन के अंदर वेरिएबल को इनिशियलाइज़ करने की कोशिश करें ।

  (function($){
     $(document).ready(function(){
        $('#data').submit(function(e){
           var ks = $('#keywords').val().split("\n");
           e.preventDefault();
           alert(ks[0]);
           $.each(ks, function(k){
              alert(k);
           });
        });
     });
  })(jQuery);

2
अलर्ट (के) केवल अनुक्रम संख्या को अलर्ट करता है, न कि मूल्य को। आपको सचेत करना चाहिए (ks [k])
HBlackorby

2
@hblackorby आपकी टिप्पणी, हालांकि प्रासंगिक है, कुछ हद तक एक मूक बिंदु है क्योंकि ओपी का प्राथमिक मुद्दा यहां उनके चर "केएस" का स्कोप और आरंभीकरण था
जॉन हार्टसॉक

90

आपको प्लेटफ़ॉर्म (ऑपरेशन सिस्टम) की परवाह किए बिना नए सिरे से पार्स करना चाहिए। यह विभाजन नियमित अभिव्यक्ति के साथ सार्वभौमिक है। आप इसका उपयोग करने पर विचार कर सकते हैं:

var ks = $('#keywords').val().split(/\r?\n/);

उदाहरण के लिए

"a\nb\r\nc\r\nlala".split(/\r?\n/) // ["a", "b", "c", "lala"]

49

यह होना चाहिए

yadayada.val.split(/\n/)

आप विभाजित कमांड में एक शाब्दिक स्ट्रिंग में गुजर रहे हैं, एक रेगेक्स नहीं।


4
"\n"और /\n/JS में दो अलग-अलग चीजें हैं। "= स्ट्रिंग, /= रेगेक्स।
मार्क बी

25
हां, लेकिन प्रभावी अंतर क्या है? मत करो "\n"और /\n/एक ही बातें मेल खाते हैं?
स्कॉट स्टैफ़र्ड

22
दोनों "\ n" और / \ n / एक ही के बारे में काम करेंगे, लेकिन आपके द्वारा विभाजित किए जा रहे स्रोत के आधार पर, val.split (/ [\ r \ n] + /) जैसा कुछ बेहतर हो सकता है। यदि आपके स्रोत में "\ r \ n" लाइन-ब्रेक हैं, तो "\ n" पर विभाजित होने से अंत में "\ r" निकल जाता है जो समस्याएँ पैदा कर सकता है।
xtempore

30

चूंकि आप उपयोग कर रहे हैं textarea, आप लाइन ब्रेक के लिए \ n या \ r (या \ r \ n) पा सकते हैं। तो, निम्नलिखित सुझाव दिया गया है:

$('#keywords').val().split(/\r|\n/)

रेफ: जाँच करें कि क्या स्ट्रिंग में एक लाइन ब्रेक शामिल है


29
या, अधिक विशेष रूप से, /\r?\n/... मुझे लगता है कि |(या) CRLF लाइन के अंत के लिए खाली परिणामों का उपयोग करेगा (या)।
डस्टी

आप आधुनिक वेब पर कहीं भी CR-only ( \r) लाइन विराम को देखने नहीं जा रहे हैं । अंतिम स्थान जहां उनका व्यापक रूप से उपयोग किया गया था वह लगभग 20 साल पहले से प्राचीन मैक ओएस संस्करणों में था।
इल्मरी करोनें

8

केवल

var ks = $('#keywords').val().split(/\r\n|\n|\r/);

पूरी तरह से काम करेगा।

यकीन \r\nहै कि RegExp स्ट्रिंग के अग्रणी पर रखा गया है , क्योंकि यह पहले की कोशिश की जाएगी।


gRegex के अंत में आवश्यक नहीं है
Yetti99

4

नई लाइनों का उपयोग करके एक स्ट्रिंग को विभाजित करने का सबसे सरल और सबसे सुरक्षित तरीका, प्रारूप (CRLF, LFCR या LF) की परवाह किए बिना, सभी कैरिज रिटर्न वर्णों को निकालना और फिर नई लाइन वर्णों पर विभाजित करना है"text".replace(/\r/g, "").split(/\n/);

आप निरंतर नई लाइनों है जब (यानी यह सुनिश्चित करता है कि \r\n\r\n, \n\r\n\rया \n\n) परिणाम हमेशा एक ही हो जाएगा।

आपके मामले में कोड ऐसा दिखेगा:

(function ($) {
    $(document).ready(function () {
        $('#data').submit(function (e) {
            var ks = $('#keywords').val().replace(/\r/g, "").split(/\n/);
            e.preventDefault();
            alert(ks[0]);
            $.each(ks, function (k) {
                alert(k);
            });
        });
    });
})(jQuery);

यहां कुछ उदाहरण दिए गए हैं जो इस पद्धति के महत्व को प्रदर्शित करते हैं:

var examples = ["Foo\r\nBar", "Foo\r\n\r\nBar", "Foo\n\r\n\rBar", "Foo\nBar\nFooBar"];

examples.forEach(function(example) {
  output(`Example "${example}":`);
  output(`Split using "\n": "${example.split("\n")}"`);
  output(`Split using /\r?\n/: "${example.split(/\r?\n/)}"`);
  output(`Split using /\r\n|\n|\r/: "${example.split(/\r\n|\n|\r/)}"`);
  output(`Current method: ${example.replace(/\r/g, "").split("\n")}`);
  output("________");
});

function output(txt) {
  console.log(txt.replace(/\n/g, "\\n").replace(/\r/g, "\\r"));
}


3
  1. var ks = $('#keywords').val().split("\n");ईवेंट हैंडलर के अंदर ले जाएं
  2. के alert(ks[k])बजाय का उपयोग करेंalert(k)

  (function($){
     $(document).ready(function(){
        $('#data').submit(function(e){
           e.preventDefault();
           var ks = $('#keywords').val().split("\n");
           alert(ks[0]);
           $.each(ks, function(k){
              alert(ks[k]);
           });
        });
     });
  })(jQuery);

डेमो


1

गुडऑल जावास्क्रिप्ट:

 var m = "Hello World";  
 var k = m.split(' ');  // I have used space, you can use any thing.
 for(i=0;i<k.length;i++)  
    alert(k[i]);  

0

समस्या यह है कि जब आप आरंभ करते हैं ks, तो valueसेट नहीं किया गया है।

आप मूल्य लाने के लिए की जरूरत है जब उपयोगकर्ता प्रपत्र सबमिट करता। तो आपको कॉलबैक फ़ंक्शन के अंदर आरंभ करने की आवश्यकता हैks

(function($){
   $(document).ready(function(){
      $('#data').submit(function(e){
      //Here it will fetch the value of #keywords
         var ks = $('#keywords').val().split("\n");
         ...
      });
   });
})(jQuery);

0

यहाँ उदाहरण के console.logबजाय के साथ है alert()। यह ज्यादा सुविधाजनक है :)

var parse = function(){
  var str = $('textarea').val();
  var results = str.split("\n");
  $.each(results, function(index, element){
    console.log(element);
  });
};

$(function(){
  $('button').on('click', parse);
});

आप इसे यहाँ आज़मा सकते हैं


-1

(function($) {
  $(document).ready(function() {
    $('#data').click(function(e) {
      e.preventDefault();
      $.each($("#keywords").val().split("\n"), function(e, element) {
        alert(element);
      });
    });
  });
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<textarea id="keywords">Hello
World</textarea>
<input id="data" type="button" value="submit">


1
इस दृष्टिकोण को मौजूदा जवाबों से अच्छी तरह से कवर किया गया है
काइलमिट

@KyleMit हाँ, मैं उन उत्तरों से गुजरता हूं, सबसे संभावित उत्तर जावास्क्रिप्ट की मूल अवधारणा के कारण समान हैं, लेकिन मैं कोड की लाइन के साथ फोकस या चिंता करता हूं कि मैंने यह उत्तर क्यों पोस्ट किया ...
ankitkanojia
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.