| 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: 7 let
|
|||
0