Autor Zpráva
weroro
Profil
Ahojte,
keďže neoplývam dostatočnou znalosťou regulárnych výrazov, žiadam vás o pomoc s optimalizáciou mnou "zbastlených" výrazov. (Podľa mňa sú zbytočne dlhé a komplikované)


Príklad reťazca, ktorý potrebujem ošetriť:
'color:red; ..#id{font-size:2rem ;width:10% ; }; .. + div{height:50px}border:1px solid ; '

očakávaný výstup
'color:red;..#id{font-size:2rem;width:10%}..+div{height:50px}border:1px solid;'

--
Tento výraz má za úlohu odstrániť všetky prebytočné medzery pred a za znakom ; v rôznych kombináciách
 ;  
; 
 ;
str = str.replace(/((\s+;\s+)|(;\s+)|(\s+;))/gim, ';')


Tento výraz má za úlohu odstrániť všetky prebytočné ; pred a za znakom } v rôznych kombináciách
;}; 
};
;}
str = str.replace(/(;};)|(;})|(};)/gim, '}')


Tento výraz má za úlohu odstrániť všetky prebytočné medzery pred a za znakom .. a zároveň pred a za znakom v zozname :, ::, ., #, >, +, ~, *

napr. .. # id{} ... trieda{} a potrebujem výstup ..#id{}...trieda{}

str = str.replace(/((\s+|)\.+?(:|\.|#|>|~|\+|::|\*)\s+)/gim, '..$3')


Všetky tieto replace() volám v sérii nad jedný reťazcom str.replace().replace().replace()

Ak treba niečo viac vysvetliť, stačí požiadať.

Ďakujem za váš čas.
Kajman
Profil
Zkuste, zda rychlost neovlivní nahrazení všech středníků - i těch, co nemají před sebou nebo za sebou bílý znak (díky flagu m jen v rámci stejného řádku).
str.replace(/\s*;\s*/gm, ';')
blaaablaaa
Profil
Trošku OT, ale pokud jde o minifikaci CSS, není lepší použít už hotové řešení nebo minifikovat jen při deployi?
weroro
Profil
Kajman:
Hviezdička, to mi tam chýbalo. :) Rýchlosť to až tak veľmi neovplyvní.
Ide mi hlavne o skrátenie toho výrazu, aby mal po minifikácii JS súbor, čo najmenšiu veľkosť.

Ďakujem.

blaaablaaa:
Nie, nie je to minifikácia CSS. Jedná sa o sanitáciu vstupu do parsera.


Aktuálne to mám upravené takto:
str
    .replace(/\s*;\s*/gm, ';')
    .replace(/;*};*/gm, '}')
    .replace(/\s*\.\.\s*(:|::|#|>|~|\+|\.|\*)\s*/gm, '..$1')

Je technicky možné, nejak skombinovať prvé dva replace() do jedného? Prípadne aj všetky 3. (Stačí mi aj odkaz na nejaký článok, ktorý o tom pojednáva)
weroro
Profil
Tak si rovno odpoviem.

str
    .replace(/\s*([;{}:#>~+.*])\s*/gm, '$1')
    .replace(/;*};*/gm, '}')

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0