Parsing textarea

Ответ на вопрос http://ru.stackoverflow.com/questions/597114/%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BA%D0%B0-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%B0%D1%80%D1%81%D0%B8%D0%BD%D0%B3%D0%B0-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8

by Alexey Demin

HTML

<textarea id="skinsList">
★ Falchion Knife | Boreal Forest (Factory New)
Souvenir FAMAS | Teardown (Battle-Scarred)
★ StatTrak™ Flip Knife | Lore (Field-Tested)
★ Bayonet | Autotronic (Battle-Scarred)
AK-47 | Redline (Field-Tested)
★ Karambit | Bright Water (Battle-Scarred)
StatTrak™ Negev | Man-o'-war (Minimal Wear)
★ M9 Bayonet | Marble Fade (Minimal Wear)
★ StatTrak™ Flip Knife | Gamma Doppler (Minimal Wear)
Tec-9 | Nuclear Threat (Factory New)
Souvenir Tec-9 | Nuclear Threat (Minimal Wear)
★ StatTrak™ Karambit 
★ StatTrak™ Gut Knife 
★ Huntsman Knife
</textarea>

CSS

textarea {
  width: 100%;
  height: 250px;
  font-family: monospace;
}

JavaScript

console.clear();

var lines = $("#skinsList").val().split("\n"),
    skins = [];
    
lines.forEach(function(item, i, arr){
  
  var skin = {
    isSouvenir : false,
    isKnife : false,
    hasCounter : false,
    counterName : null,
    quality : null,
    name : null
  },
  line = item;
  
  var starPos = line.indexOf("★");
  if(starPos != -1){
      skin.isKnife = true;
      line = line.substr(starPos + 2);
  }
  
  var souvenirPos = line.indexOf("Souvenir");
  if(souvenirPos != -1){
      skin.isSouvenir = true;
      line = line.substr(souvenirPos + "Souvenir".length + 1);
  }
  
  var bracePos = line.indexOf("(");
  if(bracePos != -1){
      skin.quality = line.substring(bracePos + 1, line.indexOf(")"));
      line = line.substring(0, bracePos - 1);
  }
  
  if(line.indexOf("™ ") != -1){
      var tmp = line.split("™ ");
      skin.counterName = tmp[0];
      skin.hasCounter = true;
      line = tmp[1];
  }
  
  skin.name = line;
  
  skins.push(skin);
});
console.info(skins);