Remove line breaks from start and end of string

JavascriptRegex

Javascript Problem Overview


I noticed that trim() does not remove new line characters from the start and end of a string, so I am trying to accomplish this with the following regex:

return str.replace(/^\s\n+|\s\n+$/g,'');

This does not remove the new lines, and I fear I am out of my depth here.

EDIT The string is being generated with ejs like so

go = ejs.render(data, { 
    locals: { 
        format() {
            // 
        }
    } 
});

And this is what go is, but with a few empty lines before. When I use go.trim() I still get the new lines before.

<?xml version="1.0"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="Out" page-width="8.5in" page-height="11in" margin-top="1in" margin-bottom="0.5in" margin-left="0.75in" margin-right="0.75in">
            <fo:region-body margin-top="1in" margin-bottom="0.25in"/>
            <fo:region-before extent="1in"/>
            <fo:region-after extent="0.25in"/>
            <fo:region-start extent="0in"/>
            <fo:region-end extent="0in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="Out" initial-page-number="1" force-page-count="no-force">
        <fo:static-content flow-name="xsl-region-before">
            <fo:block font-size="14pt" text-align="center">ONLINE APPLICATION FOR SUMMARY ADVICE</fo:block>
            <fo:block font-size="13pt" font-weight="bold" text-align="center">Re:
                SDF, SDF
            </fo:block>

        </fo:static-content>

        <fo:flow flow-name="xsl-region-body" font="10pt Helvetica">

            .. removed this content

        </fo:flow>
    </fo:page-sequence>
</fo:root>

Javascript Solutions


Solution 1 - Javascript

Try this:

str = str.replace(/^\s+|\s+$/g, '');

jsFiddle here.

Solution 2 - Javascript

String.trim() does in fact remove newlines (and all other whitespace). Maybe it didn't used to? It definitely does at the time of writing. From the linked documentation (emphasis added):

> The trim() method removes whitespace from both ends of a string. Whitespace in this context is all the whitespace characters (space, tab, no-break space, etc.) and all the line terminator characters (LF, CR, etc.).


If you want to trim all newlines plus other potential whitespace, you can use the following:

return str.trim();

If you want to only trim newlines, you can use a solution that targets newlines specifically.

Solution 3 - Javascript

/^\s+|\s+$/g should catch anything. Your current regex may have the problem that if your linebreaks contain \r characters they wouldn't be matched.

Solution 4 - Javascript

Try this:

str.split('\n').join('');

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJen ZhangView Question on Stackoverflow
Solution 1 - JavascripthohnerView Answer on Stackoverflow
Solution 2 - JavascriptBen KaneView Answer on Stackoverflow
Solution 3 - JavascriptBergiView Answer on Stackoverflow
Solution 4 - JavascriptyesmeckView Answer on Stackoverflow