Subtekenreeksen en patronen zoeken in tekenreeksenFlash Player 9 of hoger, Adobe AIR 1.0 of hoger Subtekenreeksen zijn opeenvolgende tekens binnen een tekenreeks. De tekenreeks "abc" heeft bijvoorbeeld de volgende subtekenreeksen: "", "a", "ab", "abc", "b", "bc" en "c". Met ActionScript-methoden kunt u zoeken naar subtekenreeksen van een tekenreeks. Patronen worden in ActionScript gedefinieerd door tekenreeksen of door reguliere expressies. De volgende reguliere expressie definieert bijvoorbeeld een specifiek patroon: de letters A, B en C gevolgd door een cijferteken (de slashes zijn reguliere-expressiescheidingstekens): /ABC\d/ ActionScript bevat methoden voor het zoeken van patronen in tekenreeksen en voor het vervangen van gevonden overeenkomsten met vervangende subtekenreeksen. Deze methoden worden beschreven in de volgende secties. Reguliere expressies kunnen ingewikkelde patronen definiëren. Zie Reguliere expressies gebruiken voor meer informatie over reguliere expressies. Een subtekenreeks zoeken op tekenpositieDe methoden substr() en substring() zijn vergelijkbaar. Beide methoden retourneren een subtekenreeks van een tekenreeks. Beide hebben twee parameters. In beide methoden is de eerste parameter de positie van het teken aan het begin van de tekenreeks. In de methode substr() is de tweede parameter echter de lengte van de subtekenreeks die wordt geretourneerd; in de methode substring() is de tweede parameter de positie van het teken aan het einde van de subtekenreeks (die niet is opgenomen in de geretourneerde tekenreeks). Dit voorbeeld laat het verschil zien tussen deze twee methoden: var str:String = "Hello from Paris, Texas!!!"; trace(str.substr(11,15)); // output: Paris, Texas!!! trace(str.substring(11,15)); // output: Pari De methode slice() werkt ongeveer op dezelfde manier als de methode substring(). Met twee niet-negatieve gehele getallen als parameters werken ze exact gelijk. De methode slice() kan echter negatieve gehele getallen als parameters hebben. In dit geval wordt de tekenpositie vanuit het einde van de tekenreeks gehaald, zoals in het volgende voorbeeld wordt getoond: var str:String = "Hello from Paris, Texas!!!"; trace(str.slice(11,15)); // output: Pari trace(str.slice(-3,-1)); // output: !! trace(str.slice(-3,26)); // output: !!! trace(str.slice(-3,str.length)); // output: !!! trace(str.slice(-8,-3)); // output: Texas U kunt niet-negatieve en negatieve gehele getallen combineren als parameters van de methode slice(). De tekenpositie zoeken van een overeenkomende subtekenreeksMet de methoden indexOf() en lastIndexOf() kunt u overeenkomende subtekenreeksen opzoeken in een tekenreeks, zoals in het volgende voorbeeld wordt getoond: var str:String = "The moon, the stars, the sea, the land"; trace(str.indexOf("the")); // output: 10 De methode indexOf() maakt onderscheid tussen hoofd- en kleine letters. U kunt als volgt een tweede parameter opgeven om de indexpositie aan te geven in de tekenreeks van waaruit de zoekopdracht wordt gestart: var str:String = "The moon, the stars, the sea, the land" trace(str.indexOf("the", 11)); // output: 21 De methode lastIndexOf() zoekt naar de laatste instantie van een subtekenreeks in de tekenreeks: var str:String = "The moon, the stars, the sea, the land" trace(str.lastIndexOf("the")); // output: 30 Bij het gebruik van een tweede parameter bij de methode lastIndexOf(), wordt de zoekopdracht in achterwaartse richting (van rechts naar links) uitgevoerd vanaf de desbetreffende indexpositie in de tekenreeks. var str:String = "The moon, the stars, the sea, the land" trace(str.lastIndexOf("the", 29)); // output: 21 Een array subtekenreeksen maken met behulp van een scheidingstekenMet de methode split() kunt u een array subtekenreeksen maken met behulp van een scheidingsteken. U kunt bijvoorbeeld een tekenreeks met door komma's of tabs gescheiden waarden segmenteren in meerdere tekenreeksen. Het volgende voorbeeld laat zien hoe u een array kunt opsplitsen in subtekenreeksen met de ampersand (&) als scheidingsteken: var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65"; var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"] De tweede parameter van de methode split(), die optioneel is, definieert de maximumgrootte van de array die wordt geretourneerd. U kunt ook een reguliere expressie gebruiken als scheidingsteken: var str:String = "Give me\t5." var a:Array = str.split(/\s+/); // a == ["Give","me","5."] Zie Reguliere expressies gebruiken en de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform voor meer informatie. Patronen in tekenreeksen zoeken en subtekenreeksen vervangenDe klasse String bevat de volgende methoden voor het werken met patronen in tekenreeksen:
Deze methoden worden beschreven in de volgende secties. U kunt tekenreeksen of reguliere expressies gebruiken om patronen die in deze methoden worden gebruikt, te definiëren. Zie Reguliere expressies gebruiken voor meer informatie over reguliere expressies. Overeenkomende subtekenreeksen zoekenDe methode search() retourneert de indexpositie van de eerste subtekenreeks die overeenkomt met een gegeven patroon, zoals in dit voorbeeld wordt getoond: var str:String = "The more the merrier."; // (This search is case-sensitive.) trace(str.search("the")); // output: 9 U kunt ook reguliere expressies gebruiken om het patroon waarmee moet worden overeengekomen te definiëren, zoals in dit voorbeeld wordt getoond: var pattern:RegExp = /the/i; var str:String = "The more the merrier."; trace(str.search(pattern)); // 0 De uitvoer van de methode trace() is 0, omdat het eerste teken in de tekenreeks indexpositie 0 is. De markering i wordt ingesteld in de reguliere expressie, zodat de zoekopdracht geen onderscheid maakt tussen hoofd- en kleine letters. De methode search() vindt slechts een overeenkomst en retourneert de beginindexpositie, zelfs als de markering g (global) is ingesteld in de reguliere expressie. In het volgende voorbeeld wordt een ingewikkeldere reguliere expressie getoond, die overeenkomt met een tekenreeks tussen dubbele aanhalingstekens: var pattern:RegExp = /"[^"]*"/; var str:String = "The \"more\" the merrier."; trace(str.search(pattern)); // output: 4 str = "The \"more the merrier."; trace(str.search(pattern)); // output: -1 // (Indicates no match, since there is no closing double quotation mark.) De methode match() werkt ongeveer op dezelfde manier. De methode zoekt naar een overeenkomende subtekenreeks. Wanneer u echter de algemene markering gebruikt in een reguliere-expressiepatroon, zoals in het volgende voorbeeld, retourneert match() een array van overeenkomende subtekenreeksen: var str:String = "bob@example.com, omar@example.org"; var pattern:RegExp = /\w*@\w*\.[org|com]+/g; var results:Array = str.match(pattern); De array results wordt op het volgende ingesteld: ["bob@example.com","omar@example.org"] Zie Reguliere expressies gebruiken voor meer informatie over reguliere expressies. Overeenkomende subtekenreeksen vervangenMet de methode replace() kunt u in een tekenreeks zoeken naar een opgegeven patroon en overeenkomende items vervangen door de opgegeven vervangende tekenreeks, zoals in het volgende voorbeeld wordt getoond: var str:String = "She sells seashells by the seashore."; var pattern:RegExp = /sh/gi; trace(str.replace(pattern, "sch")); //sche sells seaschells by the seaschore. In dit voorbeeld wordt voor de overeenkomende tekenreeksen geen onderscheid gemaakt tussen hoofd- en kleine letters, omdat de markering i (ignoreCase) is ingesteld in de reguliere expressie, en meerdere overeenkomende items worden vervangen, omdat de markering g (global) is ingesteld. Zie Reguliere expressies gebruiken voor meer informatie over reguliere expressies. U kunt de volgende $-vervangingscodes in de vervangende tekenreeks opnemen: De vervangende tekst die in de volgende tabel wordt getoond, wordt ingevoegd op de plaats van de vervangingscode $:
Hierna volgt een voorbeeld van de vervangingscodes $2 en $1, die de eerste en tweede vastgelegde overeenkomende groep vertegenwoordigen: var str:String = "flip-flop"; var pattern:RegExp = /(\w+)-(\w+)/g; trace(str.replace(pattern, "$2-$1")); // flop-flip U kunt ook een functie gebruiken als tweede parameter van de methode replace(). De overeenkomende tekst is vervangen door de geretourneerde waarde van de functie. var str:String = "Now only $9.95!"; var price:RegExp = /\$([\d,]+.\d+)+/i; trace(str.replace(price, usdToEuro)); function usdToEuro(matchedSubstring:String, capturedMatch1:String, index:int, str:String):String { var usd:String = capturedMatch1; usd = usd.replace(",", ""); var exchangeRate:Number = 0.853690; var euro:Number = parseFloat(usd) * exchangeRate; const euroSymbol:String = String.fromCharCode(8364); return euro.toFixed(2) + " " + euroSymbol; } Wanneer u een functie opgeeft als tweede parameter van de methode replace(), worden de volgende argumenten doorgegeven aan de functie:
|
![]() |