Autor | Zpráva | ||
---|---|---|---|
Leo Profil |
#1 · Zasláno: 26. 10. 2009, 22:05:37
Mám problém s regulárním výrazem v JavaScriptu, který řeším už dost dlouho, abych se nemusel stydět zeptat :-) Jde o hledání celého slova. V angličtině je to jednoduché, tam stačí např.
/\b(worm)\b/ ale v češtině to žalostně selhává, pokud se ve slově objeví diakritika, protože \b je sice hranice slova, ale to slovo je definované jen pomocí znaků a-zA-Z0-9, a tak je hranice slova i mezi písmeny "t" a "á" ve slově "montáž". Mělo by to fungovat i na slovo na začátku nebo konci řetězce. Díky, Leo |
||
Aesir Profil |
#2 · Zasláno: 27. 10. 2009, 10:03:42
[#1] Leo:
Pro multibyte znaky používát něco takového (ale ne v JS): (\s|^)montáž(\s|$) Jelikož JS moc neznám, tak nevím jestli to nebude potřebovat trochu upravit, ale myšlenka je asi jasná :) |
||
Leo Profil |
#3 · Zasláno: 27. 10. 2009, 11:36:01
Diky za snahu, ale problém je v tom, že originální \b má nulovou délku, je to jen hranice, ale nezahrnuje sousední znaky, jako je tomu ve variantě \s, a třeba při replace to dělá neplechu, když je těch slov víc a následují těsně po sobě. Leo
|
||
Leo Profil |
#4 · Zasláno: 27. 10. 2009, 11:58:44
Tak jsem trochu experimentoval a napadlo mě, že by mohlo jít využít tvrzení o následujícím a předcházejícím (lookahead assertion a lookbehind assertion). Mé nadšení zchladlo v okamžiku, kdy jsem si uvědomil, že JavaScript nepodporuje tvrzení o předcházejícím.... Leo
|
||
Chamurappi Profil |
#5 · Zasláno: 29. 10. 2009, 03:06:44
Reaguji na Lea:
Také už nad tímto zadáním pár let přemýšlím. Žádné universální řešení mě bohužel nenapadá. Jednotlivá dílčí zadání jdou ale vždy nějak došaškovat pomocí více operací (s pomocnou proměnnou atd.), ale nebývá to moc hezké. Potřebuješ něco konkrétního? |
||
Časová prodleva: 15 let
|
0