ExpReg, чтобы отделить данные от строки

Мне нужно обработать список элементов, чтобы отделить некоторые значения.

Строка состоит из имени и числового значения, которое я должен хранить в одном array_nombre с одной стороны и array_numeros с другой. Для этого моя идея состояла в том, чтобы разделить с помощью регулярных выражений, однако результат не тот, который ожидается.

Вот что я несу:

var nombreValor = document.getElementById("entrada").innerHTML;
var extraerNombres = nombreValor.split(/\d+.+/gm); //:: Array que almacena el nombre de cada item
extraerNombres.forEach(element => document.write('<div>-' + element + '-</div>'));
var extraerValor = nombreValor.match(/\d+/gm); //:: Array que almacena el costo de cada item
extraerValor.forEach(element => document.write('<div>-' + element + ' gp' + '-</div>'));
<p id="entrada" style="display:none;">
    Icy War Axe	12 000 gp
    Jade Hammer	25 000 gp
    Krimhorn Helmet	200 gp
    Lavos Armor	16 000 gp
    Leaf Legs	500 gp
    Leopard Armor	1 000 gp
    Leviathan's Amulet	3 000 gp
    Light Shovel	300 gp
    Lightning Boots	2 500 gp
    Lightning Headband	2 500 gp
    Lightning Legs	11 000 gp
    Lightning Pendant	1 500 gp
    Lightning Robe	11 000 gp
    Lunar Staff	5 000 gp
    Magic Plate Armor	90 000 gp
    Magma Amulet	1 500 gp
    Magma Boots	2 500 gp
    Magma Coat	11 000 gp
    Magma Legs	11 000 gp
    Magma Monocle	2 500 gp
    Mammoth Fur Cape	6 000 gp
    Mammoth Fur Shorts	850 gp
    Mammoth Whopper	300 gp
    Mastermind Shield	50 000 gp
    Medusa Shield	9 000 gp
    Mercenary Sword	12 000 gp
    Model Ship	1 000 gp
    Mycological Bow	35 000 gp
    Mystic Blade	30 000 gp
    Naginata	2 000 gp
    Nightmare Blade	35 000 gp
    Noble Axe	10 000 gp
    Norse Shield	1 500 gp
    Onyx Pendant	3 500 gp
    Orcish Maul	6 000 gp
    Oriental Shoes	15 000 gp
    Pair of Iron Fists	4 000 gp
    Paladin Armor	15 000 gp
    Patched Boots	2 000 gp
    Pharaoh Banner	1 000 gp
    Pharaoh Sword	23 000 gp
    Pirate Boots	3 000 gp
    Pirate Hat	1 000 gp
    Pirate Knee Breeches	200 gp
    Pirate Shirt	500 gp
    Pirate Voodoo Doll	500 gp
    Platinum Amulet	2 500 gp
    Ragnir Helmet	400 gp
    Relic Sword	25 000 gp
    Rift Bow	45 000 gp
    Rift Crossbow	45 000 gp
    Rift Lance	30 000 gp
    Rift Shield	50 000 gp
    Ring of the Sky	30 000 gp
    Royal Axe	40 000 gp
    Ruby Necklace	2 000 gp
    Ruthless Axe	45 000 gp
    Sacred Tree Amulet	3 000 gp
    Sapphire Hammer	7 000 gp
    Scarab Amulet	200 gp
    Scarab Shield	2 000 gp
    Shockwave Amulet	3 000 gp
    Silver Brooch	150 gp
    Silver Dagger	500 gp
    Skull Helmet	40 000 gp
    Skullcracker Armor	18 000 gp
    Spiked Squelcher	5 000 gp
    Steel Boots	30 000 gp
    Swamplair Armor	16 000 gp
</p>

Результат, который я ищу, таков:

  • 1.- Удалите слово «gp»
  • 2.- Уберите пробел между числами
  • 3.- Сохраните текст в массиве
  • 4.- Сохраните числа в массиве

    Un array_nombre = ['Icy War Axe','Jade Hammer','Krimhorn Helmet','n...']
    Y un array_numeros = ['12000','25000','200','n...']
    

, которые я затем буду использовать отдельно для формирования таблицы.

Спасибо!

1
задан 27.11.2019, 11:06
1 ответ

Используя стратегию дели и ты победишь:

  1. Мы Ищем имена (буквы и место).
  2. Мы Ищем числа (числа с местом в способе).
  3. Мы Снимаем место в числах.

проще иногда использовать два регулярных выражения, что сложная одна.

let nombreValorList = document.getElementById("entrada").innerHTML.split(/\n/).filter(n => n);
const nombreRE = /[a-z ]+/i; //letras y espacios
const cantidadesRE = /[0-9]* ?[0-9]+/ //numeros
let nombres = nombreValorList.map(nv => {
  if (nv){
   const r= nv.match(nombreRE)[0].trim();
   return r
  }
});

let precios = nombreValorList.map(nv => {
  if (nv){
   const r= nv.match(cantidadesRE)[0].replace(/ /g,'');
   return r
  }
});




nombres.forEach(element => document.write('<div>-' + element + '-</div>'));

precios.forEach(element => document.write('<div>-' + element + ' gp' + '-</div>'));
<p id="entrada" style="display:none;">
    Icy War Axe	12 000 gp
    Jade Hammer	25 000 gp
    Krimhorn Helmet	200 gp
    Lavos Armor	16 000 gp
    Leaf Legs	500 gp
    Leopard Armor	1 000 gp
    Leviathan's Amulet	3 000 gp
    Light Shovel	300 gp
    Lightning Boots	2 500 gp
    Lightning Headband	2 500 gp
    Lightning Legs	11 000 gp
    Lightning Pendant	1 500 gp
    Lightning Robe	11 000 gp
    Lunar Staff	5 000 gp
    Magic Plate Armor	90 000 gp
    Magma Amulet	1 500 gp
    Magma Boots	2 500 gp
    Magma Coat	11 000 gp
    Magma Legs	11 000 gp
    Magma Monocle	2 500 gp
    Mammoth Fur Cape	6 000 gp
    Mammoth Fur Shorts	850 gp
    Mammoth Whopper	300 gp
    Mastermind Shield	50 000 gp
    Medusa Shield	9 000 gp
    Mercenary Sword	12 000 gp
    Model Ship	1 000 gp
    Mycological Bow	35 000 gp
    Mystic Blade	30 000 gp
    Naginata	2 000 gp
    Nightmare Blade	35 000 gp
    Noble Axe	10 000 gp
    Norse Shield	1 500 gp
    Onyx Pendant	3 500 gp
    Orcish Maul	6 000 gp
    Oriental Shoes	15 000 gp
    Pair of Iron Fists	4 000 gp
    Paladin Armor	15 000 gp
    Patched Boots	2 000 gp
    Pharaoh Banner	1 000 gp
    Pharaoh Sword	23 000 gp
    Pirate Boots	3 000 gp
    Pirate Hat	1 000 gp
    Pirate Knee Breeches	200 gp
    Pirate Shirt	500 gp
    Pirate Voodoo Doll	500 gp
    Platinum Amulet	2 500 gp
    Ragnir Helmet	400 gp
    Relic Sword	25 000 gp
    Rift Bow	45 000 gp
    Rift Crossbow	45 000 gp
    Rift Lance	30 000 gp
    Rift Shield	50 000 gp
    Ring of the Sky	30 000 gp
    Royal Axe	40 000 gp
    Ruby Necklace	2 000 gp
    Ruthless Axe	45 000 gp
    Sacred Tree Amulet	3 000 gp
    Sapphire Hammer	7 000 gp
    Scarab Amulet	200 gp
    Scarab Shield	2 000 gp
    Shockwave Amulet	3 000 gp
    Silver Brooch	150 gp
    Silver Dagger	500 gp
    Skull Helmet	40 000 gp
    Skullcracker Armor	18 000 gp
    Spiked Squelcher	5 000 gp
    Steel Boots	30 000 gp
    Swamplair Armor	16 000 gp
</p>
1
ответ дан 01.12.2019, 10:46