Eu tenho um texto em uma área de texto e li-o usando o atributo .value.
Agora eu gostaria de remover todas as quebras de linha (o caractere produzido quando você pressiona Enter) do meu texto agora usando .replace com uma expressão regular, mas como eu indico uma quebra de linha em uma regex?
Se isso não for possível, existe outro caminho?
javascript
regex
string
Wingblade
fonte
fonte
Respostas:
Este é provavelmente um FAQ. De qualquer forma, quebras de linha (melhor: novas linhas) podem ser de retorno de carro (CR,
\r
em Macs mais antigos), avanço de linha (LF\n
, em Unices, incluindo Linux) ou CR seguido por LF (\r\n
em WinDOS). (Ao contrário de outra resposta, isso não tem nada a ver com a codificação de caracteres.)Portanto, o
RegExp
literal mais eficiente para corresponder a todas as variantes éSe você deseja corresponder a todas as novas linhas em uma sequência, use uma correspondência global,
respectivamente. Em seguida, continue com o
replace
método conforme sugerido em várias outras respostas. (Provavelmente você não deseja remover as novas linhas, mas substitua-as por outros espaços em branco, por exemplo, o caractere de espaço, para que as palavras permaneçam intactas.)fonte
\u000a
ou\n
, que é um feed de linha;\u000d
ou\r
, que é um retorno de carro;\u2028
, um separador de linha; e\u2029
um separador de parágrafos. Na prática, porém, o regex que você postou é suficiente na maioria dos casos..value
dinamicamente, por exemplotextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
. Mas este é provavelmente um caso extremo - como eu disse, na maioria dos casos o seu regex é suficiente.Como você encontrará uma quebra de linha varia entre as codificações do sistema operacional. O Windows seria
\r\n
, mas o Linux apenas usa\n
e a Apple\r
.Encontrei isso nas quebras de linha do JavaScript :
Isso deve remover todos os tipos de quebras de linha.
fonte
\r\n
e\n
e\r
melhor do que apenas/[\n\r]/g
? Certamente isso é mais lento do que deveria, pois ele só precisa verificar cada caractere contra o conjunto de duas opções possíveis.String.trim()
remove os espaços em branco do início e do fim das strings ... incluindo novas linhas.Aqui está um exemplo de violino: http://jsfiddle.net/BLs8u/
NOTA! apara apenas o início e o fim da sequência, não as quebras de linha ou os espaços em branco no meio da sequência.
fonte
Você pode usar
\n
em uma regex para novas linhas e\r
para retornos de carro.Sistemas operacionais diferentes usam terminações de linha diferentes, com misturas variadas de
\n
e\r
. Esse regex substituirá todos eles.fonte
/\n|\r/g
é escrito de forma mais eficiente/[\n\r]/g
ou uniforme/[\n\r]+/g
. Evite a alternância, a menos que seja absolutamente necessário.Se você deseja remover todos os caracteres de controle, incluindo CR e LF, pode usar este:
Ele removerá todos os caracteres não imprimíveis. Todos esses caracteres NÃO estão no espaço ASCII HEX
0x20-0x7E
. Sinta-se à vontade para modificar o intervalo HEX conforme necessário.fonte
A solução mais simples seria:
.replace()
com/\s+/g
regexp está alterando todos os grupos de caracteres de espaços em branco para um único espaço em toda a cadeia,.trim()
o resultado é a remoção de todos os espaços em branco excedentes antes e depois do texto.São considerados caracteres de espaços em branco:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
fonte
str = str.replace(/\s+/g, ' ').trim();
fonte
Para remover novos caracteres de linha, use o seguinte:
Em seguida, você pode aparar sua corda para remover espaços à esquerda e à direita:
fonte
A resposta fornecida pelo PointedEars é tudo o que a maioria de nós precisa. Mas, seguindo a resposta de Mathias Bynens, fiz uma viagem à Wikipedia e encontrei o seguinte: https://en.wikipedia.org/wiki/Newline .
A seguir, é apresentada uma função que implementa tudo o que a página Wiki acima considera "nova linha" no momento desta resposta.
Se algo não se encaixar no seu caso, basta removê-lo. Além disso, se você está procurando desempenho, pode não ser isso, mas uma ferramenta rápida que faça o trabalho em qualquer caso, isso deve ser útil.
fonte
\R
que são "todos" os feeds de linha. Em segundo lugar - por que não simplesmentesomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
olineTerminators
que existia na string por razões de desempenho.Uma quebra de linha no regex é \ n, portanto, seu script seria
fonte
Estou adicionando minha resposta, é apenas um complemento para o acima, pois para mim eu tentei todas as opções / n e não funcionou, vi que meu texto está vindo do servidor com barra dupla, então usei isso:
fonte
USE ESTA FUNÇÃO ABAIXO E FAÇA SUA VIDA FÁCIL
A abordagem mais fácil é usar expressões regulares para detectar e substituir novas linhas na string. Nesse caso, usamos a função replace junto com a string para substituir, que no nosso caso é uma string vazia.
Na expressão acima, g e m são para sinalizadores globais e multilinhas
fonte
Tente o seguinte código. Funciona em todas as plataformas.
fonte
No mac, basta usar
\n
no regexp para corresponder a quebras de linha. Portanto, o código serástring.replace(/\n/g, '')
, ps: o g seguido significa combinar todos, em vez de apenas o primeiro.Nas janelas, será
\r\n
.fonte