Autor Zpráva
RomanT
Profil *
Dobry den,

chtel bych Vas poprosit o pomoc ohledne vytvoreni regularniho vyrazu. Potrebuji v textu (v kodu) oznacit vyhl. slovo
hledam slovo : "new"

toto slovo na strance zaobalit do <span>

mam vytvoreny regular ktery pomoci js funkce replace aplikuji na stranku a oznazuje mi takto hledane slova.
Problem je pokud ma nejaky prvek napr: <span class="blue new"> . timpadem se mi naprosto rozhodi kod. <span class="blue <span class="searchedWord">new</span>">asa</span>

Potrebuji regular ktery nesahne po techto prvcich??

Dekuji mnohokrat za radu

s pozdravem a pranim prijemneho dne R.
Joker
Profil
RomanT:
Možná by stačila podmínka, že mezi nejbližším uzavřením značky a hledaným textem se nesmí nacházet žádné otevření značky:
>[^<]*(hledaný text)

Samozřejmě to 1. předpokládá, že jakémukoliv textu na stránce předchází alespoň jedna značka (což by jakýkoliv validní dokument měl splňovat), 2. se to dá splést znakem < přímo v textu (což by u validního dokumentu taky neměl být problém a 3. to pořád "rosztřelí" entity, čili hledání třeba "nbsp", by stránku s tvrdými mezerami mohlo dost rozhodit... čemuž by se v reguláru dalo předejít zakázáním ampersandu těsně před hledaným textem
Chamurappi
Profil
Reaguji na Jokera:
2. se to dá splést znakem < přímo v textu (což by u validního dokumentu taky neměl být problém)
1) Znak „<“ se nemusí zapisovat entitou, pokud za ním není znak, který by byl dovolený v názvu entity. Zápis „5<2“ je z pohledu HTML zcela v pořádku.
2) Ve <script>ech může být „<“ následované skoro čímkoliv.
3) Ve validním dokumentu mohou být CDATA sekce (přestože v prohlížečích moc nefungují).

Bavíme-li se o JavaScriptu, který by měl pracovat s právě nalistovanou stránkou a jejím innerHTML, tak podoba zpracovávaného HTML závisí na DOMu v prohlížeči, nikoliv na tom, jak úhledně ho napsal autor. V takovém případě skript entitu „&nbsp;“ nikdy neuvidí.


Reaguji na RomanTa:
Zpracováváš innerHTML na právě nalistované stránce, nebo nějaký jiný HTML kód?
Jestli hledáš na aktuální stránce, šlo by vymyslet čistší postup.
Joker
Profil
Chamurappi:
ad 1) Hmm, njn. Přesto to pořád není tak časté, takže by to nemuselo vadit.
ad 2) To by nevadilo... uvnitř značky <script> by se nemělo obalovat tak jako tak a za </script> to zase bude fungovat správně. Pravda ale je, že by ten regulár měl zařídit i vynechání značky <script> ...plus by samozřejmě měl vynechat všechno v <head>. To bych ale řešil tak, že bych nahrazoval jen v těle dokumentu.
ad 3) V CDATA sekci by se taky nemělo obalovat, ale pro většinu případů to nebude problém, protože obvykle se CDATA vyskytuje leda tak ve <style> nebo <script>, které by se z obalování měly tak jako tak vyloučit.
RomanT
Profil *
Vzhledem k navrzeni systemu a tomu ze hledane slova zadava uzivatel a tim padem nejsou konkretne dana ( coz uzivam u slovniku pojmu kdy jsou pojmy jasne dane ).

Pri tom vyhledavani jsem bohuzel neprisel na lepsi / casove neee moc narocne reseni :(

ale pokud byste meli lepsi reseni budu jen rad


dekuji
R.
Chamurappi
Profil
Reaguji na RomanaT:
A odpověď na moji otázku zní jak?
RomanT
Profil *
Jeeejda pardon,

ano zpracovavam prave nalistovanou stranku.

s pozdravem a pranim prijemneho dne R.T.
Chamurappi
Profil
Reaguji na RomanaT:
Můžeš rekurzivní funkcí projít celý DOM a prohledat jen v textové nody.

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