Javascript satırsonu nasıl bölünür


103

Jquery kullanıyorum ve bir metin alanım var. Düğmemle gönderdiğimde her metni yeni satırla ayırarak uyaracağım. Bir satırsonu olduğunda metnimi nasıl bölerim?

  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);

örnek girdi:

Hello
There

İstediğim sonuç:

alert(Hello); and
alert(There)

Yanıtlar:


91

ksGönder işlevinizin içindeki değişkeni başlatmayı deneyin .

  (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);

3
alert (k), değeri değil, yalnızca sıra numarasını uyarır.
— Uyarmalısın

2
@hblackorby OP'nin buradaki ana sorunu değişkeninin kapsamı ve ilklendirilmesiydi
— John Hartsock 8'15

92

Platformdan (işletim sistemi) bağımsız olarak yeni satırları ayrıştırmalısınız. Bu ayrım, normal ifadelerle evrenseldir. Bunu kullanmayı düşünebilirsiniz:

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

Örneğin

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

51

Olmalı

yadayada.val.split(/\n/)

bir normal dize yerine split komutuna değişmez bir dize geçiriyorsunuz.


4
"\n"ve /\n/JS'de TAMAMEN farklı iki şeydir. "= string, /= regex.
— Marc B

25
Evet ama etkili fark nedir? Etmeyin "\n"ve /\n/aynı şeyleri maç?
— Scott Stafford

22
Hem "\ n" hem de / \ n / aynı şekilde çalışır, ancak ayırdığınız kaynağa bağlı olarak val.split (/ [\ r \ n] + /) gibi bir şey daha iyi olabilir. Kaynağınızda "\ r \ n" satır sonları varsa, "\ n" üzerine bölme sonunda sorunlara neden olabilecek "\ r" karakterini bırakır.
— xtempore

30

Kullandığınız yana textarea, satır sonları için \ n ya \ r (veya \ r \ n) bulabilirsiniz. Bu nedenle, aşağıdakiler önerilir:

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

ref: dizenin satır sonu içerip içermediğini kontrol edin


29
veya, daha spesifik olarak, /\r?\n/... |(veya) kullanmanın CRLF satır sonları için boş sonuçları araya getireceğini düşünüyorum .
— Dusty

Modern web'in hiçbir yerinde yalnızca CR ( \r) satır sonlarını görmeyeceksiniz . Yaygın olarak kullanıldıkları son yer , yaklaşık 20 yıl önceki eski Mac OS sürümleriydi .
— Ilmari Karonen

8

Sadece

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

mükemmel çalışacak.

RegExp dizesinin başına \r\nyerleştirildiğinden emin olun , çünkü önce denenecektir .


gRegex sonunda gerekli değildir
— Yetti99

4

Biçimden (CRLF, LFCR veya LF) bağımsız olarak bir dizeyi yeni satırlar kullanarak bölmenin en basit ve en güvenli yolu, tüm satırbaşı karakterlerini kaldırmak ve ardından yeni satır karakterlerini bölmektir ."text".replace(/\r/g, "").split(/\n/);

Eğer sürekli yeni çizgiler olduğunda (yani bu olmasını sağlar o \r\n\r\n, \n\r\n\rya \n\n) sonucu her zaman aynı olacaktır.

Sizin durumunuzda kod şöyle görünecektir:

(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);

İşte bu yöntemin önemini gösteren bazı örnekler:

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");Olay işleyicisinin içini taşıma
  2. Yerine alert(ks[k])kullanınalert(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);

Demo


1

Good'ol javascript:

 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

Sorun şu ki, başlattığınızda ks, valueayarlanmamış.

Kullanıcı formu gönderdiğinde değeri almanız gerekir . Bu nedenle , geri arama işlevinin içini başlatmanız gerekirks

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

0

İşte console.logyerine ile örnek alert(). Daha uygun :)

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);
});

Burada deneyebilirsin


0

orada herhangi bir düzenli ifade geçmenize gerek yok. bu gayet iyi çalışıyor ..

 (function($) {
      $(document).ready(function() {
        $('#data').click(function(e) {
          e.preventDefault();
          $.each($("#keywords").val().split("\n"), function(e, element) {
            alert(element);
          });
        });
      });
    })(jQuery);

-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
bu yaklaşım, mevcut cevaplar tarafından iyi bir şekilde kapsanmaktadır
— KyleMit

@KyleMit evet, bu cevapların üzerinden geçiyorum, en olası cevaplar temel javascript kavramı nedeniyle benzer, ancak kod satırına odaklanıyorum veya endişeleniyorum, bu yüzden bu cevabı gönderdim ...
— ankitkanojia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.