Come rimuovere tutte le interruzioni di riga da una stringa?

Ho un testo in una textarea e l’ho letto usando l’attributo .value. Ora vorrei rimuovere tutte le interruzioni di riga (il carattere che viene prodotto quando si preme invio) dal mio testo ora usando .replace con un’espressione regolare, ma come posso indicare un interruzione di riga in un’espressione regolare? Se ciò non è ansible, esiste un altro modo?

Questa è probabilmente una FAQ. In ogni caso, le interruzioni di riga (meglio: newline) possono essere uno di Carriage Return (CR, \r , sui vecchi Mac), Line Feed (LF, \n , su Unices incl. Linux) o CR seguito da LF ( \r\n , su WinDOS). (Contrariamente a un’altra risposta, questo non ha nulla a che fare con la codifica dei caratteri).

Pertanto, il più efficace valore letterale di RegExp per corrispondere a tutte le varianti è

 /\r?\n|\r/ 

Se vuoi abbinare tutte le newline in una stringa, usa una corrispondenza globale,

 /\r?\n|\r/g 

rispettivamente. Quindi procedere con il metodo di replace come suggerito in diverse altre risposte. (Probabilmente non vuoi rimuovere le nuove linee, ma sostituirle con altri spazi bianchi, ad esempio il carattere dello spazio, in modo che le parole rimangano intatte.)

Come potresti trovare un’interruzione di riga varia tra le codifiche del sistema operativo. Windows sarebbe \r\n\t ma Linux usa solo \n e Apple usa \r .

L’ho trovato in interruzioni di riga javascript

 someText = someText.replace(/(\r\n\t|\n|\r\t)/gm,""); 

Questo dovrebbe rimuovere tutti i tipi di interruzioni di riga.

String.trim() rimuove gli spazi bianchi dall’inizio e dalla fine delle stringhe … incluse le nuove linee.

 const myString = " \n \n\n Hey! \n I'm a string!!! \n\n"; const trimmedString = myString.trim(); console.log(trimmedString); // outputs: "Hey! \n I'm a string!!!" 

Ecco un esempio di violino: http://jsfiddle.net/BLs8u/

NOTA! taglia solo l’inizio e la fine della stringa, non le interruzioni di riga o gli spazi bianchi nel mezzo della stringa.

Puoi usare \n in un’espressione regolare per i newline e \r per i ritorni a capo.

 var str2 = str.replace(/\n|\r/g, ""); 

Sistemi operativi diversi utilizzano terminazioni di linea diverse, con miscele diverse di \n e \r . Questa regex li sostituirà tutti.

Se si desidera rimuovere tutti i caratteri di controllo, inclusi CR e LF, è ansible utilizzare questo:

 myString.replace(/[^\x20-\x7E]/gmi, "") 

Rimuoverà tutti i caratteri non stampabili. Sono tutti caratteri NON compresi nello spazio HEX ASCII 0x20-0x7E . Sentiti libero di modificare la gamma HEX secondo necessità.

 var str = "bar\r\nbaz\nfoo"; str.replace(/[\r\n]/g, ''); >> "barbazfoo" 

Per rimuovere i nuovi caratteri di linea, usa questo:

 yourString.replace(/\r?\n?/g, '') 

Quindi puoi tagliare la tua corda per rimuovere gli spazi iniziali e finali:

 yourString.trim() 

La soluzione più semplice sarebbe:

 let str = '\t\n\r this \n \t \r is \ra \n test \t \r \n'; str.replace(/\s+/g, ' ').trim(); console.log(str); // logs: "this is a test" 

.replace() con /\s+/g regexp sta cambiando tutti i gruppi di caratteri spazi bianchi in un unico spazio nell’intera stringa, quindi noi .trim() il risultato per rimuovere tutti gli spazi bianchi eccedenti prima e dopo il testo.

Sono considerati come caratteri spazi bianchi:
[ \f\n\r\t\v​\u00a0\u1680​\u2000​-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

Un linebreak nella regex è \ n, quindi lo script sarebbe

 var test = 'this\nis\na\ntest\nwith\newlines'; console.log(test.replace(/\n/g, ' ')); 

La risposta fornita da PointedEars è tutto ciò di cui la maggior parte di noi ha bisogno. Ma seguendo la risposta di Mathias Bynens, sono andato su un viaggio su Wikipedia e ho trovato questo: https://en.wikipedia.org/wiki/Newline .

Quanto segue è una funzione drop-in che implementa tutto ciò che la pagina Wiki precedente considera “nuova linea” al momento di questa risposta.

Se qualcosa non va bene per il tuo caso, basta rimuoverlo. Inoltre, se stai cercando prestazioni, potrebbe non esserlo, ma per uno strumento veloce che fa il lavoro in ogni caso, questo dovrebbe essere utile.

 // replaces all "new line" characters contained in `someString` with the given `replacementString` const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing const LF = `\u{000a}`; // Line Feed (\n) const VT = `\u{000b}`; // Vertical Tab const FF = `\u{000c}`; // Form Feed const CR = `\u{000d}`; // Carriage Return (\r) const CRLF = `${CR}${LF}`; // (\r\n) const NEL = `\u{0085}`; // Next Line const LS = `\u{2028}`; // Line Separator const PS = `\u{2029}`; // Paragraph Separator const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators` let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it? for (let lineTerminator of lineTerminators) { if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator` let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator` finalString = finalString.replace(regex, replacementString); // perform the replacement }; }; return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`) }); 

Prova questo codice, funziona su tutte le piattaforms:

 var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks'; var break_for_linux = 'test\nwith\nline\nbreaks'; var break_for_older_mac = 'test\rwith\rline\rbreaks'; break_for_winDOS.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks' break_for_linux.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks' break_for_older_mac.replace(/(\r?\n|\r)/gm, ' '); //output 'test with line breaks' 

Un altro trucco, se vuoi ottenere dei numeri, è usare parseFloat() o parseInt() e ti restituirà un bel numero