Как выбрать все несколько пробелов, кроме двух последних перед конкретным символом с регулярным выражением? - PullRequest
1 голос
/ 16 мая 2019

Вот пример строки:

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

Каким было бы самое элегантное регулярное выражение для выбора всех лишних пробелов, КРОМЕ двух пробелов перед "-", чтобы создать элегантный список?

Вот пример желаемого результата:

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

Вот мое лучшее предположение: / {2,}(?! {2}-)/g. К сожалению, он также выбирает два пробела перед "-".

Редактировать: Я думаюЯ пойду с фолловингом:

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

Ответы [ 3 ]

1 голос
/ 16 мая 2019
(^( +)[a-zA-Z])|(( +)(( {2}-)|\n|$))
  • (^( +)[a-zA-Z]): эта группа соответствует символам до Lorem Ipsum.
  • (( +)(( {2}-)|\n|$)) Эта группа соответствует символам перед двумя пробелами и - или перед новой строкой\n, или до конца строки $.

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

1 голос
/ 16 мая 2019

Вы можете выбрать все пробелы или табуляции в начале и конце строки и заменить их пустой строкой. Затем замените строки, начинающиеся с дефиса, двумя пробелами.

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);
0 голосов
/ 16 мая 2019

Вы можете использовать группу захвата

let str = `Lorem ipsum   
        - dolor sit amet consectetur      
  - adipisicing elit. Adipisci, quam.  `

let finalList = str.replace(/^\s*(\s{2}.*)$/gm, '$1')

console.log('original list\n',str)
console.log('New list\n',finalList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...