这是一个示例字符串:
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);
答案 0 :(得分:1)
您可以从字符串的开头和结尾选择所有空格或制表符,然后将其替换为空字符串。然后以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);
答案 1 :(得分:1)
(^( +)[a-zA-Z])|(( +)(( {2}-)|\n|$))
(^( +)[a-zA-Z])
:该组匹配Lorem Ipsum
前的字符。(( +)(( {2}-)|\n|$))
该组匹配两个空格和-
之前,换行符\n
之前或字符串$
末尾之前的字符。答案 2 :(得分:0)
您可以使用捕获组
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)