Jump to content

RegEx vienkāršošana


GaGlets
 Share

Recommended Posts

Saviem garadarbiem bija nepieciešams izveidot līnijas pārbaudi ar regex.
Līniju struktūra ir specifiska līdz ar to izveidojās ļoti specifisks un nesmuks rezultāts kaut gan strādā kā nākas.

"^\S([A-Za-z+\s*]+):\s?(\S[A-Za-z+\s*]+):\s?([0-9]+)\s?:\s?([0-9]+)$"

 

Līnijas paraugi:

Tottenham Hotspur : Stoke City : 0 : 0
West Ham United : Wigan Athletic : 2 : 1
Fulham : Liverpool : 1 : 2
 
Var gadīties arī tā ka līnijā ailes ir izkārtotas ar dažāda tipa atstarpēm izņemot \n (tie būtu \t vai vairākas parastās atstarpes)
 
Nedrīkst būt tā, ka uzķer līniju kurā:
(trūksts viens vai abi nosaukumi)
(trūkst viens vai abi rezultāti)
( nav : starp ailēm )
 
 
Būtu pateicīgs redzēt kādu vienkāršāku risinājumu no kura pamācīties.
Link to comment
Share on other sites

Ja regex šķiet pārāk sarežģīts un grūti uzturams, tad izmanto parastu funkciju, kas sadalītu pēc ":" un pārbaudītu katru gabaliņu kā vien vajag.

  • Patīk 1
Link to comment
Share on other sites

Man ar liekas, ka nav nekas traks. Ja nav problēmas ar performanci, tad neredzu nekādu jēgu tērēt laiku, lai kaut ko mainītu.

Link to comment
Share on other sites

Lai risinājums būtu vieglāk uzturams, es ieteiktu problēmu risināt pa soļiem. Kad radīsies vajadzība pielikt vēl kādu pārbaudi, nebūs jāburās pa to izteiksmi

foreach(var line in file)
{
 var components = line.split(':');
 if (components.length !== 4)
 {
    throw new Exception('Slikts inputs');
 }
 else
 {
    for(var i=0;i<compnents.length;i++)
   {
     components[i] = components[i].trim();
     if (components[i].length === 0)
     {
       throw new Exception('Slikts inputs');
     }
     // te var darīt kko tālāk ar ielasītajām vērtībām
    }
 }


} 
  • Patīk 1
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...