[JS] Text Filteren (met RegExp?)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
Hoi,

Ik heb een stuk HTML waar in de body een naam staat. Nou wil ik die naam eruit filteren en opslaan in een variabele met javascript. Ik heb het ooit in Visual Basic gedaan, volgens mij met Regular Expressions, maar nu wil ik dat ook in JavaScript doen. Nou heb ik al een redelijke hoeveelheid tutorials bekeken maar ik kom er niet uit. Wat ik wil is de naam uit dit stukje code filteren:
HTML:
1
2
3
4
5
6
7
8
9
10
<table class="noprint" style="width: 100%; background-color: #0491d1; color: white;">
  <tr>
    <td align="right">
      &nbsp;
      <b>
        Piet Jansen
      </b>

    </td>
  </tr>


Dan wil ik dus Piet Jansen in een variabele hebben, maar er kan net zo goed een andere naam staan. Welke Expressie moet ik dan hebben?

Bij voorbaat dank!

[ Voor 6% gewijzigd door een moderator op 20-04-2009 23:14 . Reden: html en indenting ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Als je een beetje uitlegt wat de context is, dan kunnen we je misschien beter op weg helpen:

• Is dit de enige tabel op de pagina?
• Heb je invloed op de tabel (lees: html) wat er wordt genereerd?
• Waar komt de tekst vandaan en wat wil je ermee doen?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
Ik wil de naam van de persoon die bezoekt met een Alert weergeven. Dus als Piet Jansen de pagina bezoekt moet er een popup komen met "hallo Piet Jansen". Ik kan alleen Javascript gebruiken. Verder is het stukje " " uniek op de pagina.

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Da's niet echt wat ik vraag ;)

Maar als het de enige tabel is (en dat betwijfel ik), kan je uit de DOM alle table elementen ophalen (zou dus niet meer dan 1 zijn), vervolgens door de elementen net zolang dat je het b element te pakken hebt en daar de text node uitvissen.

Met een library als mootools kan je bovenstaande selector heel makkelijk uitvoeren :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
op het moment ben ik aan het klooien met:
code:
1
2
3
4
5
function getName() {
var RE_Name = /[a-z]{3,}\s\s[a-z]{2,}/i;
var FoundName = RE_Name.test(document.body);
alert(FoundName);
}

Echter vindt hij niks, nou is document.body volgens mij niet goed en als hij hem nou vindt zou hij alleen maar "true" geven, hoe zorg ik dat hij die naam dan geeft?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waarom zou je dit via een regExp doen?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
Omdat ik niet anders weet hoe :p Maar nu weet ik dat die RegExp goed is, alleen document.body returnt "[Object.HTMLBodyElement]" ipv wat er in de broncode staat, waarmee vervang ik dat zodat hij wel echt de body scant?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wat dacht je van googlen en vinden dat je .innerHTML of innerText kan gebruiken ;)

Trouwens, good luck met je RegExp ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
Kijk, we komen ergens! Als ik deze code gebruik returnt hij "true"
code:
1
2
3
4
5
function getName() {
var RE_Name = /[a-z]{3,}\s\s[a-z]{2,}/i;
var FoundName = RE_Name.test(document.body.innerHTML);
alert(FoundName);
}

Nu nog zorgen dat hij de naam returnt

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wat doet volgens jou je RegExp op regel 2 en sterker nog wat denk je dat regel 3 doet :x

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 15-08 10:41
Ehm, regel 2 geeft de expressie die ik zoek. En regel 3 evalueert het document op basis van die expressie of de waarde erin staat. Wat uiteindelijk werkt is:
code:
1
2
3
var RE_Name = /[a-z]{3,}\s\s[a-z]{2,}/i;
var FoundName = RE_Name.exec(document.body.innerHTML);
Alert(FoundName[0]);

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Je weet dat t via een alert weergeven van iemand zn naam ervaren kan worden als storend? Is meer iets voor 1995 ook imo :X En lees je eens in over wat de DOM is en hoe je ermee kunt werken, heb je veel meer aan dan je regex. Overigens, wat gebeurt er nu als iemand geen Piet Jansen heet maar "Jan Peter Balkenende" of "Floris Jan van Flippenstein" (voor de insiders :P) ?

Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Ja dit is onbetrouwbare bagger :P

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:30

Haan

dotnetter

Waarom gebruik je niet document.getElementsByTagname, of nog makkelijker, als je de HTML van die pagina aan kan passen:
HTML:
1
2
3
4
5
6
7
8
9
10
<table class="noprint" style="width: 100%; background-color: #0491d1; color: white;">
  <tr>
    <td align="right">
      &nbsp;
      <b id="bezoeker">
        Piet Jansen
      </b>

    </td>
  </tr>

En dan:
JavaScript:
1
2
var naam = document.getElementById("bezoeker");
alert(naam.innerHtml);


Kijk eens hier voor nog meer uitleg. Stap in ieder geval zo snel mogelijk van de regexp af, want dat slaat helemaal nergens op ;)

Kater? Eerst water, de rest komt later

Pagina: 1