使用regex将出现的空格替换为一个值,具体取决于找到的空格数



我想使用一个正则表达式,在一行中查找最小长度为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只需确保检查匹配的空白之前的空白

相关内容

最新更新