【问题标题】:Remove line breaks from start and end of string从字符串的开头和结尾删除换行符
【发布时间】:2013-01-12 09:41:54
【问题描述】:

我注意到 trim() 不会从字符串的开头和结尾删除换行符,因此我尝试使用以下正则表达式来完成此操作:

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

这不会删除新行,我担心我在这里超出了我的深度。

编辑 字符串是用 ejs 生成的,就像这样

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

这就是 go 的内容,但之前有几行空行。当我使用 go.trim() 时,我仍然会得到之前的新行。

<?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>

【问题讨论】:

  • 试试:/^[\s\n]+|[\s\n]+$/
  • 你用什么trim?标准的可以。另外,请告诉我们你的字符串,也许你有一些奇怪的(不可见的)字符。
  • 真的Javascript trim() 不删除newlines?但它应该从末端删除所有whitespaces 吗? newline 应该是其中之一。 \n\s 的子元素。
  • @elclanrs:\s中包含换行符
  • @LeeBlake trim() 删除了我的字符串末尾的换行符(来自 execSync 的 bash 输出),所以他的字符串一定有什么奇怪的地方。

标签: javascript regex


【解决方案1】:

/^\s+|\s+$/g 应该捕获任何东西。您当前的正则表达式可能存在这样的问题,即如果您的换行符包含 \r 字符,它们将无法匹配。

【讨论】:

    【解决方案2】:

    试试这个:

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

    jsFiddle here.

    【讨论】:

    • 我解决了从这个答案更改为str.replace(/^\n|\n$/g, '');
    • 这也会删除前导空格。
    • 我们如何用 PHP 做同样的事情?
    • 上面的例子有一个错误。这应该工作:str.replace(/(^\s*(?!.+)\n+)|(\n+\s+(?!.+)$)/g, "")
    • @phaberest,请写下您自己的答案。它应该是被接受的。
    【解决方案3】:

    String.trim() 实际上确实删除了换行符(和所有其他空格)。也许不习惯?在撰写本文时肯定会这样做。从链接的文档(强调添加):

    trim() 方法从字符串的两端删除空格。此上下文中的空白是所有空白字符(空格、制表符、不间断空格等)和所有行终止符(LF、CR 等)。


    如果您想修剪所有换行符以及其他潜在的空白,您可以使用以下内容:

    return str.trim();
    

    如果您只想修剪换行符,您可以使用专门针对换行符的解决方案。

    【讨论】:

    • 可能是 IE 问题?看起来 trimonly IE 9+,但如果您此时支持 IE 8,那么天堂会帮助您。 ;^D
    • 绝对有可能:)
    • 如果你想去掉所有的空格,这是可以接受的......但如果你只需要去掉新行并留下其他空格源,这将失败。
    • @SpencerO'Reilly 没错,但问题的目标是除了他们成功删除的其他空格之外,还要删除换行符。仅删除换行符也很有帮助,但这不是这个问题的答案
    【解决方案4】:

    试试这个:

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

    【讨论】:

    • 我认为这将删除所有换行符,而不仅仅是修剪开头和结尾
    最近更新 更多