regex: match

Status
Niet open voor verdere reacties.

hendrikvs

Nieuwe gebruiker
Lid geworden
1 mei 2009
Berichten
1
Gegroet,

ik zou graag uit onderstaande string beide rijen in een array steken (deze kunnen er ook meer dan 2 zijn...) halen met behulp van een regular expression. Met onderstaande code neemt hij echter alles in 1 element ipv 2... Kan iemand mij zeggen wat ik fout doe? Dank bij voorbaat!


var regex_content = /<tr id="\d+">.+<\/tr>/g;
var content_in_array = table_string.match(regex_content);


var table_string2='<tr id="2"><td><img src="/Pictures/move.png" alt="Verschuif vraag" width="16" height="16" /></td><td width="300 px"><div>&nbsp;</div><div align="left">1. qdsfqsdsfq</div></td><td width="50 px"><INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Verwijder vraag"></td></tr><tr id="1"><td><img src="/Pictures/move.png" alt="Verschuif vraag" width="16" height="16" /></td><td width="300 px"><div>&nbsp;</div><div align="left">2. sdfq</div><div>&nbsp;</div></td><td width="50 px"><INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Verwijder vraag"></td></tr>';
 
Ik vind je uitleg wat vaag, maar ik denk dat de fout ligt in het feit dat je repeat greedy is. Het plusteken zonder vraagteken zal de langst mogelijke match proberen te vinden en dus selecteren tot de laatste </tr>.

Om je repeat non-greedy te maken plaats je er een vraagteken achter +?:

PHP:
var regex_content = /<tr id="\d+">.+?<\/tr>/g;

Een repeat die niet greedy is stopt bij de eerst gevonden match.

Wanneer je nog niet erg vertrouwd bent met regexp is het misschien handig om een editor te gebruiken die regexp zoeken (Ctrl+F) ondersteunt (bijvoorbeeld Komodo Edit). Je kan dan de tekst die je wil doorzoeken in een tekstbestand zetten en gelijk zien wat veranderingen in je regexp doen in het resultaat.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan