Búsqueda de subcadenas y patrones en cadenasFlash Player 9 y posterior, Adobe AIR 1.0 y posterior Las subcadenas son caracteres secuenciales dentro de una cadena. Por ejemplo, la cadena "abc" tiene las siguientes subcadenas: "", "a", "ab", "abc", "b", "bc", "c". ActionScript dispone de métodos para buscar subcadenas de una cadena. En ActionScript los patrones se definen mediante cadenas o expresiones regulares. Por ejemplo, la siguiente expresión regular define un patrón específico que consiste en las letras A, B y C seguidas de un dígito (las barras diagonales son delimitadores de expresiones regulares): /ABC\d/ ActionScript incluye métodos para buscar patrones en cadenas y para reemplazar las coincidencias por subcadenas. Estos métodos se describen en las secciones siguientes. Las expresiones regulares permiten definir patrones complejos. Para obtener más información, consulte Uso de expresiones regulares. Búsqueda de una subcadena por posición de caracteresLos métodos substr() y substring() son similares. Los dos métodos devuelven una subcadena de una cadena. Ambos utilizan dos parámetros. En cada uno de estos métodos, el primer parámetro es la posición del carácter inicial de la cadena en cuestión. No obstante, en el método substr(), el segundo parámetro es la longitud de la subcadena que debe devolverse, mientras que en el método substring(), el segundo parámetro es la posición del carácter final de la subcadena (que no se incluye en la cadena devuelta). Este ejemplo muestra la diferencia entre estos dos métodos: var str:String = "Hello from Paris, Texas!!!"; trace(str.substr(11,15)); // output: Paris, Texas!!! trace(str.substring(11,15)); // output: Pari El método slice() funciona de forma similar al método substring(). Cuando se le facilitan como parámetros dos enteros no negativos, funciona exactamente de la misma forma. No obstante, el método slice() admite enteros negativos como parámetros, en cuyo caso la posición del carácter se mide desde el final de la cadena, como se indica en el siguiente ejemplo: 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 Se pueden combinar enteros positivos y negativos como parámetros del método slice(). Búsqueda de la posición de carácter de una subcadena coincidenteSe pueden utilizar los métodos indexOf() y lastIndexOf() para localizar subcadenas coincidentes dentro de una cadena, como se muestra en el siguiente ejemplo. var str:String = "The moon, the stars, the sea, the land";
trace(str.indexOf("the")); // output: 10
Hay que tener en cuenta que el método indexOf() distingue mayúsculas de minúsculas. Se puede especificar un segundo parámetro para indicar la posición del índice en la cadena desde la que se debe iniciar la búsqueda, de la manera siguiente: var str:String = "The moon, the stars, the sea, the land"
trace(str.indexOf("the", 11)); // output: 21
El método lastIndexOf() localiza la última instancia de una subcadena en la cadena: var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the")); // output: 30
Si se incluye un segundo parámetro con el método lastIndexOf(), la búsqueda se realiza desde esa posición de índice en la cadena hacia atrás (de derecha a izquierda): var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the", 29)); // output: 21
Creación de un conjunto de subcadenas segmentadas por un delimitadorSe puede utilizar el método split() para crear un conjunto de subcadenas, que se divide en función de un delimitador. Por ejemplo, se puede segmentar en varias cadenas una cadena delimitada por comas o tabulaciones. En el siguiente ejemplo se muestra la manera de dividir un conjunto en subcadenas con el carácter ampersand (&) como delimitador: var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65";
var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"]
El segundo parámetro del método split(), que es opcional, define el tamaño máximo del conjunto devuelto. También se puede utilizar una expresión regular como carácter delimitador: var str:String = "Give me\t5." var a:Array = str.split(/\s+/); // a == ["Give","me","5."] Para obtener más información, consulte Uso de expresiones regulares y ActionScript 3.0 Reference for the Adobe Flash Platform. Búsqueda de patrones en cadenas y sustitución de subcadenasLa clase String incluye los siguientes métodos para trabajar con patrones en cadenas:
Estos métodos se describen en las secciones siguientes. Se pueden utilizar cadenas o expresiones regulares para definir los patrones utilizados en estos métodos. Para obtener más información sobre las expresiones regulares, consulte Uso de expresiones regulares. Búsqueda de subcadenas coincidentesEl método search() devuelve la posición del índice de la primera subcadena que coincide con un patrón determinado, como se indica en este ejemplo: var str:String = "The more the merrier.";
// (This search is case-sensitive.)
trace(str.search("the")); // output: 9
También se pueden utilizar expresiones regulares para definir el patrón que se debe buscar, como se indica en este ejemplo: var pattern:RegExp = /the/i; var str:String = "The more the merrier."; trace(str.search(pattern)); // 0 La salida del método trace() es 0 porque el primer carácter de la cadena es la posición de índice 0. La búsqueda no distingue mayúsculas de minúsculas porque está establecido el indicador i en la expresión regular. El método search() busca una sola coincidencia y devuelve su posición de índice inicial, aunque el indicador g (global) esté establecido en la expresión regular. En el siguiente ejemplo se muestra una expresión regular más compleja, que coincide con una cadena entre comillas dobles: 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.) El método match() funciona de manera similar. Busca una subcadena coincidente. Sin embargo, al utilizar el indicador global en un patrón de expresión regular, como en el siguiente ejemplo, match() devuelve un conjunto de subcadenas coincidentes: var str:String = "bob@example.com, omar@example.org"; var pattern:RegExp = /\w*@\w*\.[org|com]+/g; var results:Array = str.match(pattern); El conjunto results se establece en: ["bob@example.com","omar@example.org"] Para obtener más información sobre las expresiones regulares, consulte Uso de expresiones regulares. Sustitución de subcadenas coincidentesSe puede utilizar el método replace() para buscar un patrón específico en una cadena y sustituir las coincidencias por la cadena de sustitución especificada, como se indica en el siguiente ejemplo: 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. En este ejemplo se puede observar que las cadenas coincidentes no distinguen mayúsculas de minúsculas porque está establecido el indicador i (ignoreCase) en la expresión regular y se sustituyen todas las coincidencias porque está establecido el indicador g (global). Para obtener más información, consulte Uso de expresiones regulares. Se pueden incluir los siguientes códigos de sustitución $en la cadena de sustitución. El texto de sustitución mostrado en la tabla siguiente se inserta en lugar del código de sustitución $:
Por ejemplo, a continuación se muestra el uso de los códigos de sustitución $2 y $1, que representan el primer y el segundo grupo coincidente captado: var str:String = "flip-flop"; var pattern:RegExp = /(\w+)-(\w+)/g; trace(str.replace(pattern, "$2-$1")); // flop-flip También se puede utilizar una función como segundo parámetro del método replace(). El texto coincidente se sustituye por el valor devuelto por la función. 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;
}
Si se utiliza una función como segundo parámetro del método replace(), se pasan los siguientes argumentos a la función:
|
|