Usando Regex com Palavras Monitoradas

:bookmark: Este tópico explica como usar expressões regulares (regex) de forma eficaz no recurso Watched Words do Discourse.

:discourse: Se o seu site for hospedado pelo Discourse, entre em contato com team@discourse.org se desejar ativar esta configuração.

Expressões regulares (regex) são uma ferramenta poderosa para definir padrões de busca. Você pode usar regex no recurso Watched Words para aprimorar a precisão e a flexibilidade da filtragem de palavras em seu site Discourse.

:information_source: Para usar expressões regulares (regex) em watched words, você deve primeiro ativar a configuração de site watched words regular expressions.

:warning: Regex é extremamente poderoso e, portanto, perigoso. Uma instrução regex escrita incorretamente pode causar problemas para seus usuários. Teste suas instruções regex em instâncias não produtivas antes de colocá-las em produção.

Exemplos de Padrões Regex

Aqui estão alguns padrões regex comuns e como eles podem ser empregados:

Insensibilidade a maiúsculas e minúsculas

Por padrão, o Discourse corresponde a formas maiúsculas e minúsculas de uma palavra.

thread

Isso corresponderá a thread, THREAD e thReAd.

Alternativas de caracteres

Use alternativas de caracteres para expandir suas correspondências.

(t|7)hr(3|e)(4|a)d

Isso corresponderá a todos os casos acima, mais thr3ad, 7hread e thr34d.

threads?\\S+

Isso corresponderá a thread e threads, mas não a threaded ou threading.

Limites de palavra

Padrões Regex podem corresponder acidentalmente a partes de palavras. Use limites de palavra para evitar correspondências parciais.

\\bthreads?\\b

Isso corresponde a thread e threads, mas evita correspondências como threadlike ou unthreading.

Tratamento de caracteres Unicode

Limites de palavra padrão podem falhar com caracteres Unicode. Crie limites para caracteres que não são bem tratados por regex JavaScript.

gr(ü|ue)(ß|ss)e

Isso corresponde a todas as formas comumente escritas da palavra grüße — incluindo gruesse e GRÜSSE

Digamos que você queira bloquear a palavra Über, mas não Übersicht. Usar limites de palavra como \\b(ü|ue)ber\\b não funciona porque algumas flags de limite de palavra de regex JavaScript não lidam com caracteres Unicode. Em vez disso, você tem que criar seus próprios limites.

(?:^|\\s)(ü|ue)ber\\b

Isso agora corresponderá apropriadamente a Über e ueber, mas não a Übersicht ou uebersicht.

Capturando substituições deliberadas de caracteres

Para capturar palavras onde os usuários substituem números ou caracteres especiais por letras:

\\bp[a@]ssw[o0]rd\\b

Isso corresponde a: password, p@ssword, passw0rd, p@ssw0rd, mas não a mypassword ou password123.

Tratamento de caracteres com pontuação entre eles

Para capturar tentativas de evadir filtros inserindo pontuação:

\\bs\\W*p\\W*a\\W*m\\b

Isso corresponde a: spam, s.p.a.m, s-p-a-m, s_p_a_m, mas não a spammy ou myspam.

Correspondendo a múltiplas variações de palavras

Para corresponder a frases que podem aparecer com diferentes formas de palavras:

\\b(contact|email|reach)( us| me)?\\b

Isso corresponde a: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.

Detecção de padrões de e-mail

Para capturar padrões genéricos de endereço de e-mail:

\\b[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}\\b

Isso corresponde a: user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org.

Encontrando variações de hashtag

Para corresponder a hashtags com capitalização diferente ou pequenas variações:

\\#(disc[o0]urse|f[o0]rum)\\b

Isso corresponde a: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, mas não a #discourseengine ou #forums.

Detecção de padrões repetitivos

Para capturar caracteres repetidos que podem indicar conteúdo de spam:

([a-zA-Z])\\1{3,}

Isso corresponde a: aaaample, helllllo, yessssss, detectando qualquer letra repetida 4 ou mais vezes seguidas.

Encontrando URLs com ou sem protocolo

\\b(?:https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+\\b

Isso corresponde a: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org.

Evitando classes de caracteres aninhadas

Correto:

(hold)?

Isso corresponde corretamente à palavra opcional “hold”.

Ou se você quiser alternativas de caracteres:

[h][o0][l1][d]

Isso corresponde a: hold, h0ld, ho1d, h01d.

Incorreto:

[h[o0][l1]d]?

Isso tenta aninhar classes de caracteres incorretamente e corresponderá a qualquer caractere único de h, o, 0, l, 1 ou d, fazendo com que corresponda a palavras como had, old, etc.

Usando parênteses para palavras opcionais

Correto:

forum(s)?

Isso corresponde corretamente a: forum, forums.

Incorreto:

forum[s]?

Isso corresponde a “forum” seguido por um “s” opcional, mas usa uma classe de caracteres desnecessariamente.

Uso adequado de classes de caracteres

Correto:

bad word

Para corresponder à frase “bad word”.

Ou para um exemplo de classe de caracteres:

[bB][aA][dD]

Isso corresponde a: bad, Bad, bAd, BAD, etc.

Incorreto:

[bad word]

Isso corresponde a qualquer caractere único de b, a, d, w, o, r ou d, não à frase “bad word”.

Usando quantificadores de forma eficaz

\\b[0-9]{3,5}\\b

Isso corresponde a números com 3 a 5 dígitos: 123, 1234, 12345, mas não a 12 ou 123456.

Para padrões repetitivos específicos:

(spam){2,3}

Isso corresponde a: spamspam, spamspamspam.

Aplicando limites de palavra corretamente

Sem limites:

free

Isso corresponde a: free, freedom, carefree.

Com limites:

\\bfree\\b

Isso corresponde apenas a: free, mas não a freedom ou carefree.

Tratamento correto de caracteres Unicode

Abordagem correta:

(?:^|\\s)(ö|oe)zel\\b

Isso corresponde a: özel, oezel em limites de palavra, mesmo com caracteres Unicode.

Abordagem incorreta:

\\bözel\\b

Isso pode não funcionar corretamente com o caractere turco ö.

Informações Adicionais

:information_source: Você pode testar expressões Regex em https://regex101.com/. Se o fizer, certifique-se de mudar o sabor do regex para ECMAScript.

Captura e substituição de Regex não são suportadas em Watched Words, apenas correspondência, portanto, isso não funcionará nos links ou nas ações de substituição.

13 curtidas

Perdoe minha inexperiência, mas não consegui encontrar a configuração do site para expressões regulares de palavras observadas em lugar nenhum. Também procurei por regex, expressão regular e outras variantes, mas não encontrei nada que parecesse habilitar regex para palavras observadas. Você tem o slug das configurações do site onde isso pode ser habilitado (instância hospedada na nuvem)?

EDIT a resposta estava logo acima e encontrada aqui

2 curtidas