How to split newline

I'm using jQuery, and I have a textarea. When I submit by my button I will alert each text separated by newline. How to split my text when there is a newline?

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

example input :

Hello
There

Result I want is :

alert(Hello); and
alert(There)

13 Answers

You should parse newlines regardless of the platform (operation system)This split is universal with regular expressions. You may consider using this:

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

E.g.

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

Try initializing the ks variable inside your submit function.

 (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

It should be

yadayada.val.split(/\n/)

you're passing in a literal string to the split command, not a regex.

5

Since you are using textarea, you may find \n or \r (or \r\n) for line breaks. So, the following is suggested:

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

ref: check whether string contains a line break

2

Just

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

will work perfectly.

Be sure \r\n is placed at the leading of the RegExp string, cause it will be tried first.

1

The simplest and safest way to split a string using new lines, regardless of format (CRLF, LFCR or LF), is to remove all carriage return characters and then split on the new line characters. "text".replace(/\r/g, "").split(/\n/);

This ensures that when you have continuous new lines (i.e. \r\n\r\n, \n\r\n\r, or \n\n) the result will always be the same.

In your case the code would look like:

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

Here are some examples that display the importance of this method:

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"));
}
0
  1. Move the var ks = $('#keywords').val().split("\n"); inside the event handler
  2. Use alert(ks[k]) instead of 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);

Demo

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

The problem is that when you initialize ks, the value hasn't been set.

You need to fetch the value when user submits the form. So you need to initialize the ks inside the callback function

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

Here is example with console.log instead of alert(). It is more convenient :)

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

You can try it here

(function($) { $(document).ready(function() { $('#data').click(function(e) { e.preventDefault(); $.each($("#keywords").val().split("\n"), function(e, element) { alert(element); }); }); });
})(jQuery);
<script src=""></script>
<textarea>Hello
World</textarea>
<input type="button" value="submit">
2

you don't need to pass any regular expression there. this works just fine..

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

In React Native, I have accomplish splitting by new line character via double back slashes, first one is as an escape character:

data = str.split("\\n");
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like