search

Home  >  Q&A  >  body text

javascript - 正则表达式如何匹配除首行外的每个行首?

/^/gm匹配每个行首,但怎么排除第一行的行首呢?


问题没有描述清楚,我补充下:
假定有字符串

    <p>
    <ul>
        <li></li>
        <li></li>
    </ul>
</p>

想通过正则实现每一行前面加上空格,除了第一行,变成下面的样子:

    <p>
        <ul>
            <li></li>
            <li></li>
        </ul>
    </p>

我目前已经实现的方式是:

replace(/^/gm/, "    ").replace("    ", "")

个人感觉很不优雅,需要两步replace,想需求看看是否一步到位的解决方案。

高洛峰高洛峰2900 days ago572

reply all(3)I'll reply

  • 阿神

    阿神2017-04-10 15:11:39

    排除第一行的行首

    (?!^)
    

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:11:39

    得看是哪个正则表达式流派
    js?js不支持后向查找 不支持(?<=),以下可能不是最佳方法
    /(\n^)/m 注意参数m是多行模式,匹配结果是位置(0占位)

    javascript测试案例
    a='11\n'+'22\n'+'33\n'
    ------------------------------
    "11
    22
    33
    "
    --------------------------------
    a.match(/(\n^)/m).length
    -------------------------------
    2
    
    a.match(/(?:\n^)(.+)/gm)
    ["
    22", "
    33"]
    

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:11:39

    没弄出来...XD,等大神来吧...我只会这两种了

    str.replace(/(.*)/g, " $&").replace(/\s*/, "");

    str.replace(/(.*)/g, function(index){
      if (index == 1) {
        return "$&";
      } else {
        return " $&";
      }
    );
    

    reply
    0
  • Cancelreply