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 |
#2 · Zasláno: 20. 2. 2019, 12:40:28
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 |
#3 · Zasláno: 20. 2. 2019, 12:57:45
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 |
#4 · Zasláno: 20. 2. 2019, 13:32:01
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, '}') |
||
Časová prodleva: 6 let
|
0