这是一个示例字符串:
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|$))
此组在两个空格和一个-
之前或Newlinen
之前或字符串$
结束之前匹配字符。
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)