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: Para sites em nossa hospedagem, essas configurações estão ocultas. Clientes em planos de hospedagem pagos podem entrar em contato com nossa equipe de suporte em team@discourse.org para solicitar regex com Palavras Monitoradas.
Nota: Este recurso não está disponível em nosso plano de hospedagem Gratuito.

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 flexibilidade da filtragem de palavras em seu site Discourse.

:information_source: Para usar expressões regulares (regex) em palavras monitoradas, você deve primeiro ativar a configuração do 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 entrar em produção.

Padrões Regex de Exemplo

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

Insensibilidade a Maiúsculas/Minúsculas

Por padrão, o Discourse corresponde a formas tanto em maiúsculas quanto em 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?\\b

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

Limites de Palavra

Padrões regex podem corresponder inadvertidamente 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 pelo regex do JavaScript.

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

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

Suponha 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 das sinalizações de palavra do regex do JavaScript não lidam bem com caracteres Unicode. Em vez disso, você precisa 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 mypassword ou password123

Lidando com Caracteres com Pontuação Intercalada

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

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

Isso corresponde a: spam, s.p.a.m, s-p-a-m, mas não s_p_a_m (underscore é um caractere de palavra), spammy ou myspam

Correspondência de 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 #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 vezes ou mais 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ê deseja alternativas de caracteres:

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

Isso corresponde a: hold, h0ld, ho1d, h01d

Incorreto:

[h[o0][l1]d]?

Isso tenta incorretamente aninhar classes de caracteres 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 Correto da Classe 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, e não à frase “bad word”.

Uso Eficaz de Quantificadores

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

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

Para padrões repetitivos específicos:

(spam){2,3}

Isso corresponde a: spamspam, spamspamspam

Aplicação Correta dos Limites de Palavra

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 flavour do regex para ECMAScript.

Retro-referências de grupo de captura de Regex (por exemplo, \\1 em strings de substituição) não são suportadas em valores de substituição de Palavras Monitoradas. As ações de substituição e link suportam regex para correspondência, mas a substituição é sempre uma string literal.

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