Quiero usar una expresión regular que busque espacios con una longitud mínima de 2 en una fila y reemplace la aparición con otro valor para cada aparición del espacio encontrado.
Por ejemplo:
I love to eat cakeHay 3 espacios después del amor y 4 espacios después de comer. Quiero que mi expresión regular reemplace las ocurrencias de un espacio más de 1, y que lo reemplace con un valor para cada ocurrencia encontrada.
La salida que estoy tratando de buscar:
I love---to eat----cakeProbé algo como
myStr.replace(/ +{2,}/g, '-')Puede usar este código con una mirada hacia adelante y una mirada hacia atrás:
const s = 'I love to eat cake' var r = s.replace(/ (?= )|(?<= ) /g, '-'); console.log(r); //=> 'I love---to eat----cake'Detalles RegEx:
(?= ) : coincide con un espacio solo si va seguido de un espacio| : O(?<= ) : Coincide con un espacio solo si está precedido por un espacioPuede unir dos o más espacios en blanco y reemplazarlos con la misma cantidad de guiones:
const s = 'I love to eat cake' console.log(s.replace(/\s{2,}/g, (x) => '-'.repeat(x.length)) ) El mismo enfoque se puede usar en Python (ya que lo solicitó ), re.sub(r'\s{2,}', lambda x: '-' * len(x.group()), s) , consulte Python demostración
Además, puede reemplazar cualquier espacio en blanco seguido de un carácter de espacio en blanco o precedido por un espacio en blanco usando
const s = 'I love to eat cake' console.log(s.replace(/\s(?=\s|(?<=\s.))/gs, '-') ) console.log(s.replace(/\s(?=\s|(?<=\s\s))/g, '-') ) Vea esta demostración de expresiones regulares . Aquí, la bandera s hace . coincide con cualquier carácter. g hace que la expresión regular reemplace todas las ocurrencias. También,
\s - coincide con cualquier espacio en blanco(?=\s|(?<=\s.)) - una búsqueda anticipada positiva que coincide con una ubicación seguida inmediatamente por un carácter de espacio en blanco ( \s ) o ( | ) si va precedida inmediatamente por un espacio en blanco y cualquier un carácter (que es el espacio en blanco coincidente). Si usa la versión (?<=\s\s) , no hay necesidad de la bandera s , \s\s solo se asegura de que se verifique el espacio en blanco antes del espacio en blanco coincidente.