Buscar..


Introducción

Si desea algo más que un simple reemplazo de cadena con expresiones regulares comunes, ciertamente se encontrará con problemas y llegará a la pared cuando descubra los límites de las funciones de expresión regular que tiene Coldfusion. No hay una función incorporada como la preg_replace_callback de php.

Parámetros

Parámetro Detalles
re La expresion regular
str La cadena a la que debe aplicarse la expresión regular.
callback La función donde se agrupó el grupo capturado se pasará si se encuentra una coincidencia. Allí se pueden procesar los partidos.

Observaciones

Debido a que Coldfusion en sí no ofrece lo que queremos, recurrimos a la variedad de Java, que es, como todos sabemos, por encima de Coldfusion. Java nos ofrece java.util.regex.Pattern .

Así que aquí está lo que realmente hacemos:

  1. Invoque el método de Compile desde el objeto de Clase de Pattern y pasándole el patrón de expresiones regulares (que probablemente deposite el patrón de expresiones regulares para su uso posterior).
  2. Invoque el método Matcher sobre lo que devolvió el método Compile y pasando la cadena donde se debe ejecutar el patrón.
  3. Compruebe si la coincidencia fue exitosa invocando el método de find sobre lo que devolvió el método de Matcher .

Si matcher.find() devuelve true , podríamos decir "Eso es todo", pero hay una pequeña cosa que debemos tener en cuenta: el objeto Patrón de Java almacena los grupos y nos da acceso a través de otra función, que no siempre es la mejor manera de Procesamiento adicional y no tan consistente con respecto a cómo otros lenguajes de programación manejan este caso. Por lo tanto, hacemos un bucle sobre matcher.group() para que podamos pasar una matriz que contiene los grupos capturados a la función de devolución de llamada. Y ahora podemos decir: "¡Eso es!"

Función de REReplaceCallback definida por el usuario

function REReplaceCallback(re,str,callback) {
    /*
        Thanks to Ben Nadel
        "Learning ColdFusion 8: REMatch() For Regular Expression Matching"
        from 2007-06-13
        https://www.bennadel.com/blog/769-learning-coldfusion-8-rematch-for-regular-expression-matching.htm
    */
    pattern = CreateObject("java","java.util.regex.Pattern").Compile(Arguments.re);
    matcher = pattern.Matcher(Arguments.str);
    if(matcher.find()) {
        groups = [];
        for(var i = 1; i lte matcher.groupCount(); i++) {
            ArrayAppend(groups,matcher.group(Val(i)));
        }
        return Arguments.callback(groups);
    }
    else {
        return Arguments.callback(false);
    }
}

Usando la función REReplaceCallback

REReplaceCallback('YOUR REGEX GOES HERE','AND YOUR STRING HERE',function(groups) {
    //now you can access the 'groups' array containing all the captured groups
    return result; //return whatever you've processed inside
});


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow