如何选择所有多个空格,除了带有正则态度的特定字符之前的最后两个空间



这是一个示例字符串:

   Lorem ipsum   
         - dolor sit amet consectetur      
    - adipisicing elit. Adipisci, quam.     

除了" - "之前的两个空间以外,要选择所有额外空间的最优雅的正则是什么?

这是一个理想的结果:

Lorem ipsum
  - dolor sit amet consectetur
  - adipisicing elit. Adipisci, quam.

这是我最好的猜测:/ {2,}(?! {2}-)/g.可悲的是,它还选择了" - "。

之前的两个空间

编辑:我想我会和folowwing一起去:

let str = `       Lorem ipsum   
             - dolor sit amet consectetur      
        - adipisicing elit. Adipisci, quam.   `;
str = str.replace(/ {2,}/g, "");
str = str.replace(/-/g, "  -");
console.log(str);

您可以从字符串的开始和末端选择所有空格或选项卡,然后用空字符串替换它们。然后用连字符以2个空间开头的字符串。

const regex = /^[t ]+|[t ]+$/mg;
const str = `   Lorem ipsum
         - dolor sit amet consectetur
    - adipisicing elit. Adipisci, quam. `;
const subst = ``;
const result = str.replace(regex, subst).replace(/^-/gm, "  -");
console.log(result);

您也可以组合地图和修剪:

let str = `   Lorem ipsum
         - dolor sit amet consectetur
    - adipisicing elit. Adipisci, quam. `;
str = str.split("n").map(s => s.trim()).map(x => x.replace(/^-/, "  -")).join("n");
console.log(str);

(^( +)[a-zA-Z])|(( +)(( {2}-)|n|$))
  • (^( +)[a-zA-Z]):此组与Lorem Ipsum之前的字符匹配。
  • (( +)(( {2}-)|n|$))此组在两个空格和一个-之前或Newline n之前或字符串$结束之前匹配字符。

https://regex101.com/r/i4ppg7/5

您可以使用捕获组

let str = `Lorem ipsum   
        - dolor sit amet consectetur      
  - adipisicing elit. Adipisci, quam.  `
let finalList = str.replace(/^s*(s{2}.*)$/gm, '$1')
console.log('original listn',str)
console.log('New listn',finalList)

最新更新