Autor | Zpráva | ||
---|---|---|---|
Oliverson Profil * |
#1 · Zasláno: 24. 1. 2014, 21:19:25
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 |
#2 · Zasláno: 24. 1. 2014, 21:22:44
Můžeš využit třeba tento script https://blog.twitter.com/2013/twitter-typeaheadjs-you-autocomplete-me .
|
||
Chamurappi Profil |
#3 · Zasláno: 24. 1. 2014, 21:40:44
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 split em 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 * |
#4 · Zasláno: 25. 1. 2014, 11:01:05
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 * |
#6 · Zasláno: 25. 1. 2014, 11:34:09
...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 |
#8 · Zasláno: 25. 1. 2014, 21:36:47
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/ |
||
Časová prodleva: 10 let
|
0