Regexp probleem zoek naar = binnen <>

Pagina: 1 2 Laatste
Acties:
  • 698 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 April 2003 @ 00:41:
Neenee dat zie je verkeerd.
Die match geeft de match tussen de haakjes terug hoor :)
Dus '<img ' of iets dergelijk. Niet false of true.
Maar het ligt aan de ? ( aan het vraagteken )
Dat voorbeeld met de ? is een constructie:

var foo = bar? 1:0;

equivalent met:

if (bar) {
foo = 1;
} else {
foo = 0;
}

maar goed, ik wist niet dat een str.match ook nog de match teruggeeft. In het geval van meerdere matches, zou dat dan niet een array zijn? En dat je daarom niet kan casten naar een String? Kortom: als je de g modifier weglaat, doet 'ie het dan wel?
Of misschien ondersteund IE5 het gewoon nog niet, zou me niets verbazen eigenlijk...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Is idd een array bij meerdere matches.
En bedankt voor je ? 1:0 info, kan zeer handig zijn!
Maar het ligt aan de ?
Doe maar eens dit in IE 5
JavaScript:
1
2
  str = "Hallo Thomas"
  alert(str.replace(/\w+/, "Dag"));

Dat werkt wel.
Maar deze:
JavaScript:
1
2
  str = "Hallo Thomas"
  alert(str.replace(/\w+?/, "Dag"));

Niet
:S
Hoe kan je het dan oplossen als een tekstje niet persee hoeft voor te komen?
Zoals de \ ofzo

[ Voor 19% gewijzigd door Guillome op 28-04-2003 00:51 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 April 2003 @ 00:51:
Is idd een array bij meerdere matches.
En bedankt voor je ? 1:0 info, kan zeer handig zijn!
Maar het ligt aan de ?
Doe maar eens dit in IE 5
JavaScript:
1
2
  str = "Hallo Thomas"
  alert(str.replace(/\w+/, "Dag"));

Dat werkt wel.
Maar deze:
JavaScript:
1
2
  str = "Hallo Thomas"
  alert(str.replace(/\w+?/, "Dag"));

Niet
:S
Hoe kan je het dan oplossen als een tekstje niet persee hoeft voor te komen?
Zoals de \ ofzo
ik heb het net opgezocht: met het vraagteken maak je de match ungreedy; support hiervoor is pas ingebouwd in javascript 1.5 (ECMA versie 3); IE support deze versie (gedeeltelijk) pas vanaf IE 5.5, dus het klopt dat het in IE5.0 niet werkt...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Heb jij een idee dan hoe je dat kan nabootsen?
De * "Matches zero or more times"
Maar dat doet ie dus niet.
Als je \w* doet, geeft ie een false bij een teken dat niet gematched wordt door \w

edit.
Of niet... hmm ik test het net en * werkt ook op die manier.
Maar [\/]?
Hoe moet dat dan?
[\/]* zou ook kunnen, maar dan rekend ie meerdere ook goed, alhoewel dat geen probleem is maar toch

[ Voor 37% gewijzigd door Guillome op 28-04-2003 01:01 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

[\/]{0,1} misschien
maar het lijkt me sterk dat IE5 een enkele ? niet zou kennen; hij kent het alleen niet als karakter om de greediness van een match te reversen als in .*?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Hoe bedoel je?
\w+? werkt niet in ie 5 hoor :)
Maar wat is {} eigelijks dan? Dat ken ik geeneens.
Effe opzoeke :)

Oh ja nou doe`k dat :)
Tnx :)

:X :X :X
Dan werkt ie niet meer :(
Fuk dat wordt een hoop werk weer

[ Voor 34% gewijzigd door Guillome op 28-04-2003 01:08 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 april 2003 @ 01:04:
Hoe bedoel je?
\w+? werkt niet in ie 5 hoor :)
Maar wat is {} eigelijks dan? Dat ken ik geeneens.
Effe opzoeke :)

Oh ja nou doe`k dat :)
Tnx :)
\w+? werkt inderdaad niet in IE5 omdat je hier met je ? de match ungreedy maakt. Dat wil zeggen dat je matched op 1 of meerdere woord-characters, maar stopt met matchen op het moment dat je er ook 1 of meerdere hebt (in dit geval stop je dus al bij het eerste woord-character met matchen)
een greedy match \w+ gaat net zo lang door met matchen totdat hij een niet-woord-character tegenkomt.
Met andere woorden: een ? gebruikt als quantifier (zo heet dat) zal in IE5 geen problemen geven, een ? gebruikt na een andere quantifier (zoals +? *? ?? {2,3}?) is bedoelt om de quantifier ungreedy te maken, en dat wordt in IE5 dus niet ondersteund :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

even terugkomen op je oorspronkelijke voorbeeld:

JavaScript:
1
var beginTag = String(str.match(/(\s*<[a-z|0-9]+)/gi)).toLowerCase();


waarschijnlijk werkt dit ook:

JavaScript:
1
var beginTag = str.match(/(\s*<[a-z|0-9]+)/gi)[0].toLowerCase();


disclaimer: niet getest

ik zie hier geen ? in echter...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Neen maar het was de volgende regel :+ Maar het werkt idd, tnx nogmaals :P
str = str.replace(/(<\w*?)\s/i, "");

Maar zonder werkt ie ook
Alleen deze niet dus

tmpStyle += str.match(/style=([\"\'].*?[\"\'])/gi);

Die werkt zonder .*? niet goed meer.

Match MET vraagteken
style="border-width:0px;",style="width:100px;",style="height:100px;"

Match ZONDER vraagteken
style="border-width:0px;" cellspacing="0px" cellpadding="0px" style="width:100px;" style="height:100px;"

Regel:
style="border-width:0px;" cellspacing="0px" cellpadding="0px" style="width:100px;" style="height:100px;"

[ Voor 101% gewijzigd door Guillome op 28-04-2003 01:26 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 april 2003 @ 01:18:
Neen maar het was de volgende regel :+
str = str.replace(/(<\w*?)\s/i, "");

Maar zonder werkt ie ook
Alleen deze niet dus

tmpStyle += str.match(/style=([\"\'].*?[\"\'])/gi);

Die werkt zonder .*? niet goed meer.

Match MET vraagteken
style="border-width:0px;",style="width:100px;",style="height:100px;"

Match ZONDER vraagteken
style="border-width:0px;" cellspacing="0px" cellpadding="0px" style="width:100px;" style="height:100px;"

Regel:
style="border-width:0px;" cellspacing="0px" cellpadding="0px" style="width:100px;" style="height:100px;"
Dat moet je dus met een negated class oplossen omdat je alleen maar greedy kan matchen in feite:

tmpStyle += str.match(/style=(["'][^'"]*["'])/gi);

(note dat escapes in een characterclass bijna niet noodzakelijk zijn, alleen voor [ ] - en ^ eigenlijk :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Que? negated class? CharacterClass??
En ik wordt er gek van dat jij dit allemaal zo snel weet telkens :P
edit
En natuurlijk werkt het voortreffelijk!
Dus op deze manier
[^dit]* pakt ie alles behalve 'dit'?

Enneh over dat escapen, dat doe ik omdat mijn editor (editPlus) anders zo raar syntax-hilight doet.
Dan ziet ie het als string :)

[ Voor 73% gewijzigd door Guillome op 28-04-2003 01:32 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 April 2003 @ 01:28:
Que? negated class? CharacterClass??
En ik wordt er gek van dat jij dit allemaal zo snel weet telkens :P
edit
En natuurlijk werkt het voortreffelijk!
Dus op deze manier
[^dit]* pakt ie alles behalve 'dit'?
nee, het is en blijft een characterclass, dus [^dit]* pakt alles behalve d, i of t ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Ah dat is dus een CharacterClass ;)
Ok Tnx :D

Leuk man, privé les ;) Ik leer wel giga veel zo, echt tof!!

Enneh wel een gedoe hoor zonder '?'

Van
str = str.replace(/<[^\/].*?>/gi, function($1) { malert($1); return toXHTML($1) } );
Naar
str = str.replace(/<[^\/][^>]*>/gi, function($1) { malert($1); return toXHTML($1) } );
Is dat de goeie manier?

[ Voor 102% gewijzigd door Guillome op 28-04-2003 01:40 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 april 2003 @ 01:35:
Ah dat is dus een CharacterClass ;)
Ok Tnx :D

Leuk man, privé les ;) Ik leer wel giga veel zo, echt tof!!
tsja, ik hou het maar op de terminologie die gebruikt wordt in de engelstalige boeken die ik heb en de tutorials op internet; ik zou ook niet weten hoe je dat in het Nederlands goed zou moeten verwoorden.

En och, ik leer zo ook nog wel eens bij; ik dacht bijvoorbeeld dat een match() een boolean teruggaf, dat blijkt dus een array te zijn :)

Ken je overigens de search() al? Die geeft de positie van de 1e match terug:

var str = 'abcdefg';
var startPos = str.search(/c/);
alert(startPos);

Maar de les is over nu, * crisp gaat slapen :)

Edit: ja, dat is de goede manier :)

[ Voor 5% gewijzigd door crisp op 28-04-2003 01:42 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Heej das een coole.
En ken jij de RexExp.leftContext enzo ook al?
var str = 'abcdefg';
str.search(/c/);
alert(RegExp.leftContext);
Geeft "ab"
Maar truste!!! En Tnx nogmaals

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 28 April 2003 @ 01:43:
Heej das een coole.
En ken jij de RexExp.leftContext enzo ook al?
var str = 'abcdefg';
str.search(/c/);
alert(RegExp.leftContext);
Geeft "ab"
Maar truste!!! En Tnx nogmaals
yep, die ken ik sinds ik vanmiddag het hoofdstuk RegExp in mijn Definitive JavaScript Guide (die ik gewonnen heb met een PHP contest) gelezen heb. Stom dat ik dat stukje over match() over het hoofd gezien heb 8)7
Ik ben dus eigenlijk in PHP pas met RegExpen begonnen; daar heb je ook wel coole features zoals recursie en lookbehind :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Zeg maar dag tegen IE 5
Ik heb alle ?tjes vervangen, maar nu blijkt dat ie geen function kan gebruiken in de regexp.
Dus str.replace(/\w+/, function($1) { return "asd"; });
Dan replacet ie \w+ met de string 'function($1... etc.
Dus helapidaka maar ie 5 werkt niet

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!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Effe een subtiele kick.
Mijn versie is vrij ver af nu :)
http://members.home.nl/tegroen/regexp.html
Hij kan nu ook missende tags vinden, en als je bijv. alleen </div> hebt staa, vind ie ook. (nog niet foutloos moet /> tags
PHP,ASP houdt ie rekening mee.
Alleen commentaar nog niet, dat moet nog.
Naja check and ... bewonder :P

Enneh Crips? How are U doin`? :P

:'( :'( :'( :'(
Niet eens een complimentje van Crisp
:'( :'( :'( :'(

[ Voor 26% gewijzigd door Guillome op 01-05-2003 19:14 ]

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!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

XLerator schreef op 01 mei 2003 @ 16:55:
[...]
Enneh Crips? How are U doin`? :P
druk, druk, druk, dus.... nog niet aan toegekomen...

Intentionally left blank

Pagina: 1 2 Laatste