Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda