Este tópico explica como usar expressões regulares (regex) de forma eficaz no recurso Watched Words do 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.orgpara 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.
Para usar expressões regulares (regex) em palavras monitoradas, você deve primeiro ativar a configuração do site
watched words regular expressions.
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
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.