我想使用一个正则表达式,在一行中查找最小长度为2的空格,并为找到的每个空格替换为另一个值。
例如:
I love to eat cake
恋爱后有3个空位,吃饭后有4个空位。我希望我的正则表达式替换超过1的空格,并为找到的每个空格替换一个值。
我试图追求的输出:
I love---to eat----cake
我试过类似的东西
myStr.replace(/ +{2,}/g, '-')
您可以将此代码与先行和后向代码一起使用:
const s = 'I love to eat cake'
var r = s.replace(/ (?= )|(?<= ) /g, '-');
console.log(r);
//=> 'I love---to eat----cake'
RegEx详细信息:
(?= )
:仅当后面跟着空格时才匹配空格|
:或(?<= )
:仅当前面有空格时才匹配空格
您可以匹配两个或多个空格,并用相同数量的连字符替换:
const s = 'I love to eat cake'
console.log(s.replace(/s{2,}/g, (x) => '-'.repeat(x.length)) )
同样的方法也可以在Python中使用(既然你问过了(,re.sub(r's{2,}', lambda x: '-' * len(x.group()), s)
,请参阅Python演示。
此外,您可以使用替换后面有空白字符或前面有空白的任何空白
const s = 'I love to eat cake'
console.log(s.replace(/s(?=s|(?<=s.))/gs, '-') )
console.log(s.replace(/s(?=s|(?<=ss))/g, '-') )
请参阅此regex演示。这里,s
标志使.
匹配任何字符。g
使正则表达式替换所有出现的项。此外,
s
-匹配任何空白(?=s|(?<=s.))
-与紧跟空白字符(s
(的位置相匹配的正向前瞻,如果紧跟空白字符和任何一个字符(即匹配的空白字符(,则为(|
(。如果使用(?<=ss)
版本,则不需要s
标志,ss
只需确保检查匹配的空白之前的空白