Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!