Zadejte hledaný výraz...

Nahrazení znaku v řetězci jen částečně

Ondřej Váško
verified
rating uzivatele
18. 9. 2019 07:39:33
Ahoj, mám text, který potřebuju upravit JS v následující podobě:
HS_LIC_WDS_01100_01200 a potřebuju z něho udělat HS / LIC / WDS / 01100 /01200
Použil jsem na to následující JS kód:
ale výsledek je jen HS / LIC_WDS_01100_01200
Poradil by mi někdo, prosím, co dělám špatně?
Díky, O.
18. 9. 2019 07:39:33
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416199
hm
verified
rating uzivatele
(20 hodnocení)
18. 9. 2019 07:46:50
replace nahrazuje jen prvni vyskyt...
musis pres RegEx s modifikatorem g aby to nahradilo vse... .replace(new RegExp('_', 'g'), ' / ');
18. 9. 2019 07:46:50
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416198
Voxxx93
verified
rating uzivatele
18. 9. 2019 07:52:18
Regex je taky moznost, ale v tomto pripade zbytecne slozite, zkus pouzit
PHP: str_replace - Manual
18. 9. 2019 07:52:18
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416197
hm
verified
rating uzivatele
(20 hodnocení)
18. 9. 2019 08:17:12
Napsal Voxxx93;1544752
Regex je taky moznost, ale v tomto pripade zbytecne slozite, zkus pouzit
PHP: str_replace - Manual
a to ze jsme v javascriptu vis?
18. 9. 2019 08:17:12
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416196
TomasX
verified
rating uzivatele
(4 hodnocení)
18. 9. 2019 08:22:00
Moc jiných možností než regexp není, leda to projít znak po znaku a nahradit to ručním porovnáváním.
18. 9. 2019 08:22:00
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416195
hm
verified
rating uzivatele
(20 hodnocení)
18. 9. 2019 08:23:48
Napsal TomášX;1544757
Moc jiných možností než regexp není, leda to projít znak po znaku a nahradit to ručním porovnáváním.
jeste muzes udelat split().join(), ale regex je vykonove nejlepsi ze vsech moznych variant :)
18. 9. 2019 08:23:48
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416194
qye
verified
rating uzivatele
(16 hodnocení)
18. 9. 2019 08:44:01
.replace(/_/g, ' / ');
18. 9. 2019 08:44:01
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416193
TomasX
verified
rating uzivatele
(4 hodnocení)
18. 9. 2019 09:02:54
Napsal Aleš Jiříček;1544759
jeste muzes udelat split().join(), ale regex je vykonove nejlepsi ze vsech moznych variant :)
také jsem si myslel, že regexp je nejvýkonější, ale udělal jsem 4 varianty, které mě z hlavy napadly a split/join je u mě nejrychlejší a to skoro dvojnásobně než regexp :)
JSBEN.CH Performance Benchmarking Playground for JavaScript
18. 9. 2019 09:02:54
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416192
TomasX
verified
rating uzivatele
(4 hodnocení)
18. 9. 2019 09:08:43
krom toho split/join je i jednoduší, není potřeba řešit nějaké speciální znaky jako u regexpu, takže:
asi vyhrává :)
18. 9. 2019 09:08:43
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416191
Ondřej Váško
verified
rating uzivatele
18. 9. 2019 09:18:32
Super, moc diky za pomoc a vysvetleni. Nakonec jsem pouzil split().join() a slape to jako hodinky :-)
18. 9. 2019 09:18:32
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416190
hm
verified
rating uzivatele
(20 hodnocení)
18. 9. 2019 09:25:14
ne...
u me vyhrava
text2 = text.replace(/_/g, ' / ');
JSBEN.CH Performance Benchmarking Playground for JavaScript
nevim proc je ryclejsi nez varianta s new RegExp ale vypada to ze v tom je dost citelny rozdil...
18. 9. 2019 09:25:14
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416189
TomasX
verified
rating uzivatele
(4 hodnocení)
18. 9. 2019 09:57:18
Aleš: i u tvého odkazu mi vyhrává split/join, RegExp třída je v tomhle případě asi 10 % pomalejší než přímý zápis výrazu, což je přesně stejný čas, který zabere vytvoření objektu RegExp (zkus si udělat pouze test s new RegExp), vytváření objektu s new bylo v JS vždy drahé, proto se někdy používá trik s klonováním nebo Object.create()
18. 9. 2019 09:57:18
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416188
hm
verified
rating uzivatele
(20 hodnocení)
18. 9. 2019 10:00:25
V tom pripade bude zalezet na procesoru :D protoze muj (naka i5 starsich generaci) proste opakovane o 2-3% lepsi s tim regexem :) zajimave
---------- Příspěvek doplněn 18.09.2019 v 10:05 ----------
A na Ryzen 5 1600x uplne shodne split/join a regex... hm
18. 9. 2019 10:00:25
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416187
TomasX
verified
rating uzivatele
(4 hodnocení)
18. 9. 2019 10:12:17
paměťová propustnost a ipc bude hrát velkou roli, spouštěl jsem to na hodně výkonné pracovní stanici s xeonem v poslední generaci na vysoké frekvenci, a split/join mi jede za poloviční čas než regexp. Nechce se mi ale zkoumat, kde je úzké hrdlo u těhle algoritmů :). Nechal bych to jako zaměnitelné řešení a spíše se teď rozhodovat, jestli je vstup z venku a musím ho do regexp ošetřovat nebo nad ním mám kontrolu, pro mě je regexp čitelnější...
18. 9. 2019 10:12:17
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416186
Oleg
verified
rating uzivatele
(53 hodnocení)
18. 9. 2019 10:31:24
asi zalezi jak to meri ne?
napriklad je u mne fakt rychlejsi: text2 = text.replace(new RegExp('_', 'g'), ' / '); ale v tom vasem testu mi vychazi v browseru cim dal delsi cas zpracovani 38ms, 77ms, 135ms, 177ms... :D
18. 9. 2019 10:31:24
https://webtrh.cz/diskuse/nahrazeni-znaku-v-retezci-jen-castecne#reply1416185
Pro odpověď se přihlašte.
Přihlásit