Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

200
Visualizações
Descomponer una cadena con expresiones regulares

Tengo algunas cadenas de ejemplo que necesito procesar

 string1 = "_Wondrous item, common (requires attunement by a wizard or cleric)_" string2 = "_Weapon (glaive), rare (requires attunement)_" string3 = "_Wondrous item, common_"

Quiero dividirlos en los siguientes

 group1 = { type: "Wonderous item"; rarity: "common"; attune: True class: "wizard or cleric" } group2 = { type: "Weapon (glaive)"; rarity: "rare"; attune : True } group3 = { type: "Wondrous item" rarity: "common" attune: False }

la expresión regular que tengo actualmente es desordenada y probablemente ineficiente, pero solo descompone la primera.

 regex = /_(?<type>[^:]*),\s(?<rarity>[^:]*)\s\((?<attune>[^:]+)by a(?<class>[^:]*)\)_/U

Detalles agregados

  • Esto se usará cuando se procesen documentos de texto uno por uno.
  • La picadura ocurrirá una vez en cada documento.
  • Estoy usando esto en Obsidian.MD con templater si alguien tiene curiosidad
  • Y sí, esto es para procesar elementos mágicos de D&D capturados de Reddit
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Para obtener todos los grupos para las 3 líneas usando su patrón:

 _(?<type>[^:]*?),\s+(?<rarity>[^:]*?)(?:\s+\((?<attune>[^:]+?)\s*(?:by\s+a\s+(?<class>[^:]*?))?\))?_
  • _(?<type>[^:]*?) Coincidencia _ , el tipo de grupo coincide con cualquier carácter excepto : no codicioso
  • , ,\s Match y un carácter de espacio en blanco
  • (?<rarity>[^:]*?) La rareza del grupo coincide con cualquier carácter excepto : no codicioso
  • (?: grupo de no captura
    • \s\( Coincide con un carácter de espacio en blanco y (
    • (?<attune>[^:]+?)\s* group attune coincide con cualquier carácter excepto : non greedy
    • (?:by a\s+(?<class>[^:]*?))? Opcionalmente, haga coincidir by a clase de grupo que coincida con cualquier carácter excepto : no codicioso
    • \) Partido )
  • )?_ Hacer que el grupo externo sea opcional y hacer coincidir _

Vea una demostración de expresiones regulares .

Usando la propiedad de groups , si es compatible , puede verificar los valores y actualizar el objeto en consecuencia.

 const regex = /_(?<type>[^:]*?),\s+(?<rarity>[^:]*?)(?:\s+\((?<attune>[^:]+?)\s*(?:by\s+a\s+(?<class>[^:]*?))?\))?_/; [ "_Wondrous item, common (requires attunement by a wizard or cleric)_", "_Weapon (glaive), rare (requires attunement)_", "_Wondrous item, common_" ].forEach(s => { const m = s.match(regex); if (m) { if (m.groups.class === undefined) { delete m.groups.class; } m.groups.attune = m.groups.attune === undefined ? false : true; console.log(m.groups) } });

Tenga en cuenta que en su patrón desea evitar la coincidencia : en la clase de caracteres negados, pero no hay : en los datos de ejemplo.

Para la primera clase de carácter negado, puede cambiar eso para que no coincida con la coma, y para los demás, excluya la coincidencia con el paréntesis para obtener el mismo resultado.

De esa manera, no todos los cuantificadores tienen que ser no codiciosos y puede evitar algunos retrocesos innecesarios.

 _(?<type>[^,]*),\s(?<rarity>[^:()]*)(?:\s\((?<attune>[^()]+?)\s*(?:by a\s+(?<class>[^()]*))?\))?_

Vea otra demostración de expresiones regulares .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda