Búsqueda de subcadenas y patrones en cadenas

Flash 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 caracteres

Los 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 coincidente

Se 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 delimitador

Se 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 Referencia de ActionScript 3.0 para la plataforma de Adobe Flash .

Búsqueda de patrones en cadenas y sustitución de subcadenas

La clase String incluye los siguientes métodos para trabajar con patrones en cadenas:

  • Los métodos match() y search() se utilizan para localizar subcadenas que coincidan con un patrón.

  • El método replace() permite buscar subcadenas que coincidan con un patrón y sustituirlas por una subcadena especificada.

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 .

Adobe recomienda

Trim Leading and Trailing 00s From a String (Recortar ceros a la izquierda y a la derecha en un cadena, en inglés)

Doug Reynolds

Búsqueda de subcadenas coincidentes

El 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 coincidentes

Se 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 $ :

Código $

Texto de sustitución

$$

$

$&

La subcadena coincidente.

$`

La parte de la cadena que precede a la subcadena coincidente. Este código utiliza el carácter de comilla simple recta izquierda ( ` ), no la comilla simple recta ( ' ) ni la comilla simple curva izquierda ( ' ).

$'

La parte de la cadena que sigue a la subcadena coincidente. Este código utiliza la comilla simple recta ( ' ).

$ n

El n -ésimo grupo entre paréntesis coincidente capturado, donde n es un único dígito, 1-9, y $n no va seguido de un dígito decimal.

$ nn

La nn -ésima coincidencia de grupo entre paréntesis capturada, donde nn es un número decimal de dos dígitos, 01–99. Si la nn -ésima captura no está definida, el texto de sustitución será una cadena vacía.

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:

  • La parte coincidente de la cadena.

  • Las coincidencias de grupos de paréntesis de captura. El número de argumentos pasados de esta forma varía en función del número de grupos entre paréntesis coincidentes. Se puede determinar el número de grupos entre paréntesis coincidentes comprobando arguments.length - 3 dentro del código de la función.

  • La posición de índice en la que comienza la coincidencia en la cadena.

  • La cadena completa.