Javascript如何分割换行符


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)

Answers:


89

尝试ks在您的Submit函数中初始化变量。

  (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
alert(k)仅警告序列号,而不警告值。您应该提醒(ks [k])
HBlackorby 2015年

2
@hblackorby您的评论尽管相关,但在某种程度上是个沉默点,因为OP的主要问题是变量“ ks”的范围和初始化
John Hartsock 2015年

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

您将文字字符串传递给split命令,而不是正则表达式。


4
"\n"/\n/是JS中完全不同的两件事。"=字符串,/=正则表达式。
Marc B

25
是的,但是有效的区别是什么?不要"\n"/\n/匹配相同的东西呢?
斯科特·斯塔福德,

22
“ \ n”和/ \ n /都将大致相同,但是根据要拆分的源,像val.split(/ [\ r \ n] + /)可能会更好。如果您的源有“ \ r \ n”换行符,则在“ \ n”上分割会在最后留下“ \ r”,这可能会引起问题。
xtempore,2016年


8

只是

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

会完美地工作。

确保\r\n将其放在RegExp字符串的开头,因为将首先尝试使用它。


g在正则表达式的结尾是没有必要的
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

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

问题在于,当您初始化时ksvalue尚未设置。

用户提交表单时,您需要获取值。因此,您需要初始化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

@KyleMit是的,我经历了这些答案,由于javascript的基本概念,最可能的答案是相似的,但是我关注或关注的是代码行,这就是为什么我发布此答案的原因……
ankitkanojia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.