Expressões regulares
Buscando solução quebra linha preservando data e abreviação
Parabéns por resolver o seu problema com a expressão regular que você forneceu. A expressão regular que você usou, `(\.\s{2,})`, procura por pontos seguidos de dois ou mais espaços e substitui essa combinação por `<br><br>`. Isso é útil para transformar quebras de linha no texto em tags `<br>` quando você está trabalhando com HTML.
Aqui está uma explicação detalhada do que cada parte da expressão regular faz:
- (\.\s{2,})`: Esta é a expressão regular completa.
- \.`: Procura por um ponto literal.
- \s`: Procura por um espaço em branco.
- {2,}`: Indica que o espaço em branco deve aparecer duas ou mais vezes.
- ()`: Agrupa a expressão regular para que a substituição seja aplicada ao grupo inteiro.
Aqui está um exemplo de como essa expressão regular poderia ser usada em um contexto de programação:
const textoSemQuebras = "Este é um exemplo. Este é um exemplo mais longo.";
const textoComQuebras = textoSemQuebras.replace(/(\.\s{2,})/gm, "<br><br>");
console.log(textoComQuebras);
// Saída: "Este é um exemplo.<br><br>Este é um exemplo mais longo."
No exemplo acima, a expressão regular é usada com o método `replace` para substituir todas as ocorrências de pontos seguidos por dois ou mais espaços por `<br><br>`, criando quebras de linha no texto.
O problema no seu script está na expressão regular utilizada para adicionar quebras de linha. Parece que você está tentando adicionar quebras de linha após cada ponto final, exceto em casos específicos
Aqui está uma correção para a expressão regular que deve fornecer o resultado desejado:
const textoComQuebras = textoSemQuebras.replace(/(\.\s*\d{2}\.\d{2}\.\d{4}|\.\s*[A-Z])/gm, " ");
Essa expressão regular faz o seguinte:
- `\.\s*\d{2}\.\d{2}\.\d{4}` Captura casos onde há um ponto seguido por espaços e uma data no formato "dd.mm.aaaa"
- `|\.\s*[A-Z]` Captura casos onde há um ponto seguido por espaços e uma letra maiúscula
const textoFormatado = texto.replace(/(\.(?!\s*(?:\d{2}\.\d{2}\.\d{4}|prof\.\s[A-Za-z])))/gm, "$1\n");
Nesta expressão regular:
- `\.` Corresponde a um ponto final
- `(?!\s*(?:\d{2}\.\d{2}\.\d{4}|prof\.\s[A-Za-z]))` É um lookahead negativo que garante que o ponto final não seja seguido por uma data no formato 'dd.mm.aaaa' ou por 'prof. Nome', seguido por espaços em branco
- `gm` Modificadores para pesquisa global e multi-linha
const textoFormatado = texto.replace(/(\.(?!(\s*\d{2}\.\d{2}\.\d{4}|prof\.\s[A-Za-z])))/gm, "$1\n");
Nesta nova expressão regular:
- `\.` Corresponde a um ponto final
- `(?!(\s*\d{2}\.\d{2}\.\d{4}|prof\.\s[A-Za-z]))` É um lookahead negativo que garante que o ponto final não seja seguido por uma data no formato 'dd.mm.aaaa' ou por 'prof. Nome', seguido por espaços em branco
- `gm` Modificadores para pesquisa global e multi-linha
const textoFormatado = texto.replace(/(\.(?!(\s*\d{2}\.\s*\d{2}\.\s*\d{4}|prof\.\s[A-Za-z])))/gm, "$1\n");
Aqui está o que mudou: A expressão `\s*\d{2}\.\s*\d{2}\.\s*\d{4}` garante que a data seja capturada mesmo que haja espaços entre os números do dia, mês e ano
- A expressão `\s[A-Za-z]` garante que a palavra "prof" seja seguida por um espaço e um nome, evitando que ocorra a quebra de linha logo após "prof."
const textoFormatado = texto.replace(/(\.(?!(\s*\d{2}\.\s*\d{2}\.\s*\d{4}|prof\.\s[A-Za-z])))/gm, "$1\n");
Nesta expressão regular revisada:
- `\.` Corresponde a um ponto final
- `(?!(\s*\d{2}\.\s*\d{2}\.\s*\d{4}|prof\.\s[A-Za-z]))` É um lookahead negativo que garante que o ponto final não seja seguido por uma data no formato 'dd.mm.aaaa' ou por 'prof. Nome', seguido por espaços em branco
- `gm` Modificadores para pesquisa global e multi-linha
const textoFormatado = texto.replace(/(\.(?!(\d{2}\.\d{2}\.\d{4}|prof\.\s[A-Za-z])))/gm, "$1\n");
const textoFormatado = texto.replace(/(\.\s{2,})/gm, "$1\n");
Nesta expressão regular:
- `\.` Corresponde a um ponto final
- `\s{2,}` Corresponde a dois ou mais espaços em branco
- `gm` Modificadores para pesquisa global e multi-linha
O padrão `(\.\s{2,})` irá capturar um ponto seguido por pelo menos dois espaços em branco. Quando isso acontecer, o grupo de captura `(\.\s{2,})` será substituído por si mesmo (o ponto seguido pelos espaços) mais uma quebra de linha (`\n`), o que resultará na quebra de linha após o ponto seguido por dois ou mais espaços em branco