logo
18.09.2019 07:39
1
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:
Kód:
$(document).ready(function() {
  function replaceHeadline() {
    var headline = $('.entry-title');
    $(headline).each(function() { 
      var text = $(headline).text().replace('_', ' / ');
      $(this).text(text);
    });                                                 
  }
				
  replaceHeadline();
});
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.

Co se právě děje na Webtrhu?

18.09.2019 07:46
2
replace nahrazuje jen prvni vyskyt...

musis pres RegEx s modifikatorem g aby to nahradilo vse... .replace(new RegExp('_', 'g'), ' / ');
18.09.2019 08:22
3
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.09.2019 08:23
4
Původně odeslal TomášX
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.09.2019 08:44
5
.replace(/_/g, ' / ');
18.09.2019 09:02
6
Původně odeslal Aleš Jiříček
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.09.2019 09:08
7
krom toho split/join je i jednoduší, není potřeba řešit nějaké speciální znaky jako u regexpu, takže:

Kód:
var text = $(headline).text().split("_").join(" / ")
asi vyhrává :)
18.09.2019 09:18
8
Super, moc diky za pomoc a vysvetleni. Nakonec jsem pouzil split().join() a slape to jako hodinky :-)
18.09.2019 09:25
9
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.09.2019 09:57
10
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.09.2019 10:00
11
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.09.2019 10:12
12
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.09.2019 10:31
13
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.09.2019 11:55
14
to mi pripomina

Název:  javascript.jpg
Zobrazení: 117
Velikost:  253,9 KB