Se eu tiver uma string com qualquer tipo de caractere não alfanumérico:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Como obter uma versão sem pontuação no JavaScript:
"This is an example of a string with punctuation"
javascript
regex
Quentin Fisk
fonte
fonte
\s
) por um único espaço. Se você quiser entrar em colapso qualquer número de caracteres em branco para baixo para um, você deixaria fora do limite superior assim:replace(/\s{2,}/g, ' ')
.@+?><[]+
):replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Se alguém estiver procurando por um conjunto ainda um pouco mais completo.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Qual funciona melhor para mim, então outra alternativa seria:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Remove tudo, exceto caracteres alfanuméricos e espaços em branco, e recolhe vários caracteres adjacentes em espaços únicos.
Explicação detalhada:
\w
é qualquer dígito, letra ou sublinhado.\s
é qualquer espaço em branco.[^\w\s]
é qualquer coisa que não seja um dígito, letra, espaço em branco ou sublinhado.[^\w\s]|_
é o mesmo número 3, exceto com os sublinhados adicionados novamente.fonte
wouldn't
edon't
Aqui estão os caracteres de pontuação padrão para US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Para pontuação Unicode (como aspas, traços, etc.), você pode facilmente corresponder em intervalos de blocos específicos. O bloco de pontuação geral é
\u2000-\u206F
e o bloco de pontuação suplementar é\u2E00-\u2E7F
.Juntos, e escapados adequadamente, você obtém o seguinte RegExp:
Isso deve corresponder a praticamente qualquer pontuação que você encontrar. Então, para responder à pergunta original:
Fonte US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Origem Unicode: http://kourge.net/projects/regexp-unicode-block
fonte
/ [^ A-Za-z0-9 \ s] / g deve corresponder a toda pontuação, mas mantém os espaços. Portanto, você pode usar
.replace(/\s{2,}/g, " ")
para substituir espaços extras, se precisar. Você pode testar a regex em http://rubular.com/Atualização : Só funcionará se a entrada for ANSI English.
fonte
Corri o mesmo problema, esta solução fez o truque e era muito legível:
Resultado:
O truque era criar um conjunto negado . Isso significa que ele corresponde a qualquer coisa que não esteja dentro do conjunto, ou seja
[^abc]
- não a, b ou c\W
é qualquer não-palavra, portanto[^\W]+
, negará qualquer coisa que não seja uma palavra char .Ao adicionar o _ (sublinhado), você também pode negar.
Aplique a aplicação globalmente
/g
, para que você possa executar qualquer string e limpar a pontuação:Legal e Limpo ;)
fonte
Vou colocá-lo aqui para outros.
Corresponda todos os caracteres de pontuação para todos os idiomas:
Construído a partir da categoria de pontuação Unicode e adicionado alguns símbolos comuns do teclado, como
$
colchetes e\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
substituição básica:
adicionado como espaço
adicionado ^ para inverter o padrão para combinar não com pontuação, mas com as próprias palavras
para idiomas como o hebraico, talvez para remover "'as aspas simples e dupla. e pensar mais sobre isso.
usando este script:
Etapa 1: selecione no Firefox segurando controlando uma coluna de números U + 1234 e copie-a; não copie U + 12456, eles substituem
passo 2 (eu fiz no chrome) encontre alguma área de texto e cole-a, clique com o botão direito do mouse e clique em inspecionar. então você pode acessar o elemento selecionado com $ 0.
a etapa 3 copiou nas primeiras letras os ascii como caracteres separados, não varia, porque alguém pode adicionar ou remover caracteres individuais
fonte
Em um idioma compatível com Unicode, a propriedade de caractere de Pontuação Unicode é
\p{P}
- que geralmente você pode abreviar\pP
e às vezes expandir para\p{Punctuation}
para facilitar a leitura.Você está usando uma biblioteca de expressões regulares compatíveis com Perl?
fonte
Se você deseja remover a pontuação de qualquer sequência, use o
P
classe Unicode.Mas, como as classes não são aceitas no JavaScript RegEx, você pode tentar esse RegEx que deve corresponder a toda a pontuação. Corresponde às seguintes categorias: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm Tão geralPontuação SuplementarPontuação CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.
Eu o criei usando esta ferramenta on-line que gera expressões regulares especificamente para JavaScript. Esse é o código para alcançar seu objetivo:
fonte
Para strings en-US (inglês americano), isso deve ser suficiente:
Esteja ciente de que, se você suporta UTF-8 e caracteres como chinês / russo e tudo, isso também os substituirá, então você realmente precisa especificar o que deseja.
fonte
se você estiver usando lodash
Este exemplo
fonte
De acordo com a lista de pontuações da Wikipedia, tive que criar o seguinte regex que detecta pontuações:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
fonte
/
(mais comum), então ele deve ser escapado dentro da classe de caracteres acima, adicionando um back-cortar antes, como este:\/
. Isto é como você iria utilizá-lo:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. A propósito, eu não vejo o backtick (`) em nenhum lugar, como é?Se você deseja reter apenas alfabetos e espaços, pode:
fonte
Depende do que você está tentando retornar. Eu usei isso recentemente:
fonte