Min bruger bliver præsenteret for et tekstfelt, der indeholder en sætning og eventuelt også hashtags. Disse hashtags skal jeg finde med noget javascript. Det eneste krav jeg har er at disse tags kun må indeholde bogstaver (også specialbogstaver som æ, ø, å, ö osv.) og tal. Eksempler kunne være:
- "Dette er et #hashtag fra #roskilde12" -> hashtag, roskilde12 - "Jeg spiser lige en #pizza!!" -> pizza - "Hashtags er #d__et fedeste" -> (ingen)
Den løsning jeg har lige nu er nok ikke den smarteste, og den virker ikke med æøå og kun med mellemrum som operator:
analyzeForHashTags: function() { var value = this.getEl().getValue(); var pos = value.indexOf("#"); var hashtags = []; var wlt = Ext.get("wuff-live-tags"); wlt.update(""); do { var nextWhitespace = value.indexOf(" ", pos); if (nextWhitespace == -1) { nextWhitespace = value.length; } var tagLength = nextWhitespace - pos; var tag = value.substr(pos, tagLength); if (alphanumeric(tag.substr(1, tag.length-1))) { hashtags.push(tag); var div = document.createElement("div"); div.innerHTML = tag; wlt.appendChild(div); } pos = value.indexOf("#", pos + 1); } while (pos > -1); }
"også specialbogstaver som æ, ø, å, ö osv" >> Du er nødt til at være meget mere specifik. Du må remse alle lovlige - eller alle ulovlige - tegn op. Ellers bliver det svært at lave noget, du kan bruge =)
/mvh </bole>
Synes godt om
Slettet bruger
19. august 2012 - 22:22#2
Så lad os sige det sådan her: ALLE bogstaver, tal, - og _
Don't tell me ... show me. Én af os skal skrive dem, og da det er dig, der skal bruge det, er det dig, der laver arbejdet =)
Synes godt om
Slettet bruger
19. august 2012 - 22:57#4
Det er der min problemstilling er. Jeg er ikke en haj til regex, og jeg tænker at der må være en smart genvej til "samtlige bogstaver", tal og så tilføje nogle specialtegn manuelt ('-', '_').
Noget i stil med: /\l\n\-_/ hvis \l stod for all letters og \n for all numbers, men det ved jeg ikke.
Det kan man godt, men jeg tror ikke, du helt har forstået opgaven: Et hashmark, efterfulgt af tal, underscore eller bogstaver - herunder alle alfabetiske specialtegn. Right boundary er et mellemrum =)
Så må du jo prøve at læse teksten. Det står højt og larmende, at underscore skal accepteres - og faktisk også bindestreg. Bindestregen er dog ligetil at indsætte i #11.
Jeg må stadig anbefale at du tester din kode. Det er ikke en anvendelig JS-syntaks. Dit '<' er en fejl. Det skal fjernes for at virke.
Derudover er der ingen grund til at suge vitaminer ud af maskinen med helt overflødige og grådige lookahead assertions.
Men hvorfor er alt andet end white-space nu pludselig tilladt i #19. Det virker ikke, som om du har helt styr på RegExp's virkemåde =)
Jeg har ingen problemer med at læse, skrive eller forstå en RegExp. Jeg forstår bare ikke, du vælger den mest ressourcekrævende løsning - og specielt ikke, når den ikke opfylder kravene =)
I JS er (?<=#) ikke en lookbehind, men en syntaksfejl. 'Ægte' lookbehinds er ikke understøttet i JS - kun lookaheads. Lookbehinds er man nødt til at 'hacke' sig til. Den tilsvarende positive lookahead i JS er til gengæld helt 'Pearlish': (?=#)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.