Autor Zpráva
Leo
Profil
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
[#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
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
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
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?

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:

0