Autor Zpráva
Oliverson
Profil *
V javascriptu mám např. tento řetězec

var retezec="-Jiří Brada-Karel Pich-Jiří Remek-Petr Chvála-Jiří Fořt-Radim Forejt-";

a pomocí match()

bych potřeboval do pole načíst všechny příjmení začínající např. na "Jiří"

Pozor jména mohou být různého typu " Karel Hynek Mácha " "Karel IV." apod.

Jde mi o to vytvořit si jakýsi jednoduchý našeptávač, kdy napíšu začátek jména a mne by ten skritp vyhodil všechny shody do následující pomlčky.

Záchytným bodem tam je ta pomlčka, která ukončuje každé jméno.
okolojsoucí
Profil
Můžeš využit třeba tento script https://blog.twitter.com/2013/twitter-typeaheadjs-you-autocomplete-me .
Chamurappi
Profil
Reaguji na okolojsoucího:
Jak mu ten padesátikilový bumbrlíček vyřeší rozdělení řetězce regulárem?


Reaguji na Oliversona:
Na tvém místě bych:
1) Rozdělil řetězec splitem podle pomlčky.
2) Prošel prvky pole a naházel je do objektu podle počátečního jména (či jmen), aby v objekt["Jiří"] bylo pole ["Jiří Brada", "Jiří Fořt"].
3) Při našeptávání bych se akorát podíval do objekt[jméno].

Kdybys to chtěl opravdu hledat regulárem, tak by to mělo jít něčím jako řetězec.match(new RegExp("-" + jméno + "\\s[^-]", "g")).
Oliverson
Profil *
díky Chamurappi to bude dobré řešení, jdu to zkusit odladit. Letmo jsem zkoušel i ten rugulár a je zajímavé že nevyhovuje dle představ viz:

var str = "Jiří";

var retezec="-Jiří Brada-Karel Pich-Jiří Remek-Petr Chvála-Jiří Fořt-Radim Forejt-";
var match = retezec.match(new RegExp("-" + str + "\\s[^-]", "g")); 
 

for(p = 0; p < match.length; p++){   
    alert(match[p]); 
    }


V match[] jsou tyto výsledky: "-Jiří B" , "-Jiří R" , "-Jiří F"


Já bych potřeboval vyzobat celá jména bez pomlček a navíc i při částečném vstupu:

při str="Ji" str="Jiř" str="Jiří" atd. výsledek vždy: "Jiří Brada" "Jiří Remek" "Jiří Fořt"

Jde ten regulár ještě "vylepšit" Díky!
juriad
Profil
Oliverson:
http://kod.djpw.cz/ylbb
Používá exec
Do reguláru můžeš ještě doplnit modifikátor, aby vyhledával bez ohledu na velikost písmen; hledání bez diakritiky je obtížnější.

Místo spojovníku by bulo vhodnější používat jiný oddělovač:
e) Dříve se spojovník užíval též v domácích příjmeních složených ze dvou samostatných jmen označujících jednu osobu, např.: Otýlie Sklenářová-Malá, František Jílek-Oberpfalcer. Pokud jde o jméno zděděné po předcích, lze spojovník z důvodu udržování rodinné tradice ponechat. Vzniká-li však nové složené příjmení (např. po uzavření sňatku), podle současné legislativy (resp. podle výkladu Ministerstva vnitra k ustanovení § 8 odst. 1 zák. č. 94/1963 Sb. ve znění pozdějších předpisů a § 70 odst. 1 zák. č. 301/2000 Sb.) bychom spojovník užívat neměli, např.: Radoslava Kvapilová Brabcová, Lucie Saicová Římalová.
http://prirucka.ujc.cas.cz/en/?id=164
Oliverson
Profil *
...diakritiku vem čert, spojovník můžu změnit - máš pravdu. Takže pohoda. Vřelé díky Pane! ;-)
Amunak
Profil
Nebylo by lepší (rychlejší) rozdělit to nejdřív podle mezery do nějakého pole [jmen], a to procházet přes indexOf? Na pět jmen to nebude mít vliv, ale kdyby jich bylo pět set nebo pět tisíc, regexp bude řádově pomalejší. Aneb „Now You Have Two Problems“.
juriad
Profil
Amunak:
Ano bylo, pokud bude jmen hodně (tisíce), bude lepší nějaký chytřejší algoritmus (Aho-Corasiková?). Pro stovky by asi indexOf fungoval, pro desítky regex stačí.

Aby těch problémů nebylo nekonečně mnoho: http://xkcd.com/1313/

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: