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.