纵码过河山 2021-07-09 10:44 采纳率: 66.7%
浏览 108
已采纳

如何用正则按首行删除缩进?

是否有办法用正则匹配,按照首行n个空格数,删除每行前n个字符?
例如有一段字符串:

"    if (a > b) \n        return true;\n    return false;"

效果:

    if (a > b) 
        return true;
    return false;

经过正则替换后:

if (a > b) 
    return true;
return false;

推荐js示例,不过别的语言也可以的

  • 写回答

1条回答 默认 最新

  • 八云黧 2021-07-09 11:08
    关注
    let spaceDetect = /([ ])+\S/
    // string是输入的字符串
    let string = "    if (a > b) \n        return true;\n    return false;"
    // 计算非空白字符前有多少空格,但是会把\n这些算进去,可能会有小问题
    let num = spaceDetect.exec(string)[0].length-1
    // 通过num构建正则对象
    let re = new RegExp("\n([ ]{"+num+"})","g")
    // 将所有的\n后面num个空格替换为\n,同时还要去除第一行的空格
    let result = string.replaceAll(re,"\n").slice(num)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月9日
  • 创建了问题 7月9日