CUSTOM_REGEX - Regex Personalizado
O que é esta operação?
A operação CUSTOM_REGEX permite aplicar expressões regulares personalizadas para remover ou substituir padrões específicos não cobertos pelas operações padrão.
Por que esta operação existe?
Cada projeto tem necessidades únicas de limpeza. Esta operação existe para:
- Flexibilidade Total: Remover padrões específicos do seu domínio
- Casos Especiais: Limpar formatos não cobertos pelas operações padrão
- Substituição Avançada: Trocar padrões por outros valores
- Extensibilidade: Adicionar limpezas sem modificar o código do sistema
Como funciona internamente?
Código interno (content-cleaner-executor.service.ts:300-309):
// Apply custom regex if provided
if (config.customRegex) {
try {
const customRegex = new RegExp(config.customRegex, 'g');
const replacement = config.customReplacement || '';
cleaned = cleaned.replace(customRegex, replacement);
} catch (error) {
this.logger.warn(`Failed to apply custom regex: ${error.message}`);
}
}
Parâmetros Detalhados
customRegex (string, opcional)
O que é: Expressão regular em formato string para encontrar padrões no texto.
Padrão: Nenhum (operação não executada se não fornecido)
customReplacement (string, opcional)
O que é: String que substituirá os padrões encontrados pelo regex.
Padrão: "" (string vazia - remove o que foi encontrado)
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| inputVariable | string | Sim | Variável contendo o texto |
| customRegex | string | Não | Expressão regular personalizada |
| customReplacement | string | Não | String de substituição (padrão: "") |
| outputVariable | string | Não | Variável para resultado |
Exemplo 1: Remover CPFs
Objetivo: Remover números de CPF formatados (XXX.XXX.XXX-XX)
JSON para Importar
{
"name": "Remover CPFs do Texto",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Texto com CPF",
"parameters": {
"variableName": "text_with_cpf",
"variableValue": "Cliente José Silva, CPF 123.456.789-00, realizou compra"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Remover CPF",
"parameters": {
"inputVariable": "text_with_cpf",
"customRegex": "\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}",
"customReplacement": "[CPF REMOVIDO]",
"outputVariable": "text_clean"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Texto Anonimizado",
"parameters": {
"message": "🔒 Texto protegido:\n{{text_clean}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
🔒 Texto protegido:
Cliente José Silva, CPF [CPF REMOVIDO], realizou compra
Exemplo 2: Remover Menções @usuario
Objetivo: Remover menções estilo Twitter/Instagram (@usuario)
JSON para Importar
{
"name": "Remover Menções",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Post Social",
"parameters": {
"variableName": "social_post",
"variableValue": "Adorei! @empresa vocês são incríveis! Obrigado @suporte"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Remover Menções",
"parameters": {
"inputVariable": "social_post",
"customRegex": "@\\w+",
"customReplacement": "",
"removeExtraSpaces": true,
"outputVariable": "clean_post"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Post Limpo",
"parameters": {
"message": "📝 Post sem menções:\n{{clean_post}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
📝 Post sem menções:
Adorei! vocês são incríveis! Obrigado
Exemplo 3: Substituir Hashtags por Palavras
Objetivo: Converter #hashtag para [TAG:hashtag]
JSON para Importar
{
"name": "Converter Hashtags",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Post com Hashtags",
"parameters": {
"variableName": "post",
"variableValue": "Produto incrível! #qualidade #recomendo #topdemais"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Converter Hashtags",
"parameters": {
"inputVariable": "post",
"customRegex": "#(\\w+)",
"customReplacement": "[TAG:$1]",
"outputVariable": "formatted_post"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Post Formatado",
"parameters": {
"message": "📋 Post formatado:\n{{formatted_post}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
📋 Post formatado:
Produto incrível! [TAG:qualidade] [TAG:recomendo] [TAG:topdemais]
Resposta do Node
{
"success": true,
"data": {
"cleaned_content": "Texto processado com regex personalizado",
"stats": {
"originalLength": 100,
"cleanedLength": 85,
"reductionPercentage": "15.00%"
}
},
"executionTime": 5,
"logs": [
"Cleaned content using custom mode",
"Original: 100 chars → Cleaned: 85 chars"
]
}
Boas Práticas
✅ SIM:
- Use para padrões específicos do seu domínio (CPF, CNPJ, IDs customizados)
- Teste o regex separadamente antes de usar no flow
- Use grupos de captura () com $1, $2 em replacement para transformações avançadas
- Combine com outras operações de limpeza
❌ NÃO:
- Usar regex complexos sem testar (pode causar erros)
- Esquecer de escapar caracteres especiais no regex (\. para ponto literal)
- Tentar usar flags como /i no string (use apenas o padrão, flag 'g' é adicionada automaticamente)
Dicas
💡 Dica 1: A flag 'g' (global) é adicionada automaticamente - substitui TODAS as ocorrências
💡 Dica 2: Use \\ para escapar caracteres especiais (ex: \\. para ponto literal)
💡 Dica 3: Grupos de captura () podem ser referenciados em replacement como $1, $2, $3
💡 Dica 4: Se o regex for inválido, a operação é ignorada e um warning é logado
💡 Dica 5: Teste seus regex em https://regex101.com antes de usar no flow
Exemplos de Regex Úteis
| Padrão | Regex | Descrição |
|---|---|---|
| CPF | \\d{3}\\.\\d{3}\\.\\d{3}-\\d{2} |
Remove CPF formatado |
| CNPJ | \\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2} |
Remove CNPJ formatado |
| CEP | \\d{5}-\\d{3} |
Remove CEP brasileiro |
| Menções | @\\w+ |
Remove @mencoes |
| Hashtags | #\\w+ |
Remove #hashtags |
| IPs | \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3} |
Remove endereços IP |
| Datas BR | \\d{2}/\\d{2}/\\d{4} |
Remove datas DD/MM/YYYY |
Próximo Node
→ REMOVE_SPECIAL_CHARS - Remove caracteres especiais padrão → REMOVE_NUMBERS - Remove todos números → README - Visão geral do Content Cleaner