Vyvíjej vlastní projekty a expanduj do zahraničí! Přijď na 14. Affiliate konferenci v Praze
Zobrazují se odpovědi 1 až 14 z 14

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

  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.

  2. Co se právě děje na Webtrhu?
  3. replace nahrazuje jen prvni vyskyt...

    musis pres RegEx s modifikatorem g aby to nahradilo vse... .replace(new RegExp('_', 'g'), ' / ');

  4. 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.

  5. Citace Původně odeslal TomášX Zobrazit příspěvek
    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 :)

  6. .replace(/_/g, ' / ');

  7. Citace Původně odeslal Aleš Jiříček Zobrazit příspěvek
    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

  8. 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á :)

  9. Super, moc diky za pomoc a vysvetleni. Nakonec jsem pouzil split().join() a slape to jako hodinky :-)

  10. 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...

  11. 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()

  12. 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

  13. 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ší...

  14. 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

  15. to mi pripomina

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

Hostujeme u Server powered by TELE3