[JS] RegExp: hoe lastMatch gebruiken?

Pagina: 1
Acties:

  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
Disclaimer: Okee, m'n javascript kennis is niet groot zeker niet wat betreft regular expressions ed.

Ben nu al een tijdje opzoek naar een voorbeeld waarin lastMatch duidelijk toegepast wordt.
Telkens kom ik documenten tegen waar het even angehaald wordt of waar een, voor mij, onduidelijk voorbeeld staat.

Iemand die me een helder voorbeeld kan aandragen?

ik heb oa hier rond gezworven:
Netscape
eDevCafe

En ook m'n Javascript bible uit de O'Reilly stal verschaft geen duidelijkheid ;(

ik wil het gaan gebruiken om de laatste digit in een string te distilleren:
HTML:
1
2
3
myRe=/[0-9]/g;
    myArray = myRe.exec("2cdbbdbsbz1");
    alert(myArray);

www.jurgroessen.nl


Verwijderd

lastMatch doet bij mij geen belletje rinkelen. Bedoel je niet
String.lastIndexOf()
of
RegExp.lastIndex?
?

  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
nope, het bestaat echt.
o.a. hier staat het genoemd bij parameters van replace

www.jurgroessen.nl


Verwijderd

Dit is een typische manier om bepaalde patronen uit strings te halen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
yourRe = /[0-9]+/g;

document.write('searching...');

while (yourMatch = yourRe.exec('your 1337 string containing 5 numbers numbers.'))
{
  document.write('<hr>');

  for (a in yourMatch)
  {
    document.write(a + ' = ' + yourMatch[a] + "<br>");
  }
}

Dit is echter veel te ingewikkeld voor zo een ogenschijnlijk eenvoudig probleem.

/(\d)\D*$/ levert immers meteen al het laatste cijfer, of geeft geen resultaat als de string geen cijfers bevat.
Er zijn vast nog wel eenvoudigere oplossingen te bedenken.

En aan de array/het object dat een replace methode teruggeeft heb je op zich niet zoveel natuurlijk :)

[ Voor 0% gewijzigd door Verwijderd op 22-10-2002 15:33 . Reden: nohtml ]


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
Verwijderd schreef op 22 oktober 2002 @ 15:33:
*snip*

En aan de array/het object dat een replace methode teruggeeft heb je op zich niet zoveel natuurlijk :)
mja, ziet er 1337 uit :)

wat dat betreft breekt het me steeds vaker op dat ik een absolute wiskunde noknow ben ;(

Maar de term lastMatch zegt je ook niet echt iets?
Blijkbaar niemand want as said; een voorbeeld? nergens te vinden :)

www.jurgroessen.nl


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
ouch, als ik je script zo copy/paste uitvoer dan krijg ik de melding:
This script causes IE to run slowly. Do you want to abort the script?
:/

vette killerApp dus :)

www.jurgroessen.nl


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
<script type='text/javascript'>
var sTest = 'your 1337 string containing 5 numbers.';
var oRegexp = /(\d+)/;

oRegexp.exec(sTest);

document.write(sTest, '<hr />');
document.write('lastMatch: "', RegExp.lastMatch, '"<br />');
document.write('lastParen: "', RegExp.lastParen, '"<br />');
document.write('leftContext: "', RegExp.leftContext, '"<br />');
document.write('rightContext: "', RegExp.rightContext, '"<br />');
</script>

Today's subliminal thought is:


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
Annie: da's idd wat ik bedoelde, maar schiet mij maar in een condoom; hier krijg ik allemaal undefined's :/

properties van RegExp zijn dus alleen beschikbaar vanaf IE5.5 en hoger waarschijnlijk.
Mozilla snapt het daarentegen wel (gelukkig)..

En wat ik nu uit een experiment opmaak is dat je een een reeds ge-regExp'te string niet nog eens mag regExp'en, klopt dat?

De laatste occurence van een getal is bekend, namelijk 5 plaatsen van het eind van de string.
Dus ik dacht de laatste 5 karakters te isoleren en daarna met een 2e regExp het eerste karakter te isoleren... niet dus...

www.jurgroessen.nl


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Hangloozz schreef op 22 oktober 2002 @ 16:43:
properties van RegExp zijn dus alleen beschikbaar vanaf IE5.5 en hoger waarschijnlijk.
Mozilla snapt het daarentegen wel (gelukkig)..
Volgens devedgeguru was deze NS only, dus dat zal dan wel betekenen IE6up en NS4up (beetje verouderde tekst blijkbaar).

Maar kijk ook eens naar de tip van Cheatah, of voldoet dat niet aan je wensen?

Overigens kan je een regexp zo vaak loslaten op een string als je wil, voorbeeldje als bewijs ;).

[ Voor 0% gewijzigd door Annie op 22-10-2002 17:38 . Reden: Annie==slaapkop ]

Today's subliminal thought is:


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
Annie schreef op 22 oktober 2002 @ 17:08:
[...]
Volgens devedge was deze NS only, dus dat zal dan wel betekenen IE6up en NS4up (beetje verouderde tekst blijkbaar).
dat kan aardig kloppen ja :)
Maar kijk ook eens naar de tip van Cheatah, of voldoet dat niet aan je wensen?
voldoet aan m'n wensen.. als ik het aan de praat kreeg.
Het laat m'n browser volledig crashen en ik kan er niet achter komen wat ik er aan moet wijzigen om dat te voorkomen..

Ik heb helaas zo vaak dat ik gewoonweg niet doorzie hoe ik iets kan samenvoegen om bij een eindresultaat te komen..
Alle elementen om regExp te maken zijn er maar hoe ik daarmee nou in godsnaam de laatste voorkomende positie van een karakter uit een string filter..
Dan :r ik wel eens van mezelf.
Overigens kan je een regexp zo vaak loslaten op een string als je wil, voorbeeldje als bewijs ;).
ja lijkt mij ook, maar dit werkt niet:
HTML:
1
2
3
4
5
6
7
8
9
which = "mekker4blaat56melp100_1.jpg";
    
    var strToMatchOne = /(\d)\D*$/g;
    var strRaw = which.match(strToMatchOne);    
    alert(strRaw);
    
    var strToMatchTwo = /[^0-9]/g;
    var strNum = strRaw.match(strToMatchTwo);
    alert(strNum);

www.jurgroessen.nl


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

code:
1
2
3
str = 'My 1337 string contains 5 or even 6 numbers, man!';
re = /([0-9])[^0-9]*$/;
alert ( re.exec ( str ) [ 1 ] );


edit:

\d is natuurlijk shorthand voor [0-9]
\D voor [^0-9] dus die zou je door elkaar moeten kunnen gebruiken

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Over de match method van een string object zegt de reference het volgende:
This method is used to match a specifed regular expression against a string. If one or more matches are made, an array is returned that contains all of the matches. Each entry in the array is a copy of a string that contains a match. If no match is made, a null is returned.
m.a.w. strRaw is dus een array en kan daardoor niet later gebruikt worden om een match() op te doen.

snelle hack (foei ;)):
JavaScript:
1
var strNum = strRaw.toString().match(strToMatchTwo);

natuurlijk alleen ter illustratie, hack == ranzig

Today's subliminal thought is:


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
okee, heb weer ff tijd gehad om er aan te sleutelen en het gaat nu beter werken.
Toch is, voor wat ik d'r mee wil, javascript denk niet de geschikte partner.

De bedoeling is:
- 3 thumbnails en 1 grote afbeelding
- klik je op een thumb dan wordt de grote plaat vervangen door de grote versie van die thumb en de thumb wordt vervangen door een thumb van de oude grote plaat.. volgt u mij nog? :)
- van de geklikte thumb moet dan ook de bijbehorende text opgehaald worden uit een array.

Ik wilde dus met die regexp's de digit in de bestandsnaam gebruiken om de text uit de array te halen.

het gaat nu denk wel lukken maar het voelt buggy aan :|

www.jurgroessen.nl


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

amper ;)

Maar is het niet veel makkelijk om bij het samenstellen van de pagina ook meteen wat multi-dim arrays te setten met gegevens over de image, bijv.
image[0] = ["de text", "plaatje.jpg", "thumb.jpg"];

Waarbij je de thumb-change functie aanroept met de juiste id van de image (id van huidige grote plaat kan je in een global var bijhouden).

.. volgt u mij nog? :)

Today's subliminal thought is:


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24
jaja, ik volg jouw nog wel ;)

da's idd ook nog een potentiële oplossing.. nou, toch maar weer een deel van m'n weekeindse uurtjes besteden aan m'n werk :P

ter info: als je hier op de button 'recente cases' stampt, dan zie je de bedoeling :)
Enne, let niet op de scripting: tis nog een behoorlijke mess.

en ja, ik heb het met voorbedachte rade op m'n prive-domein gekieperd..je weet nooit waar Annie's of crispies nog mee komen :P

www.jurgroessen.nl

Pagina: 1