regex - Reemplazar la última coma con o usando ColdFusion
(3)
¿Cuál es la mejor forma de convertir una matriz de valores en ColdFusion?
[ Fed Jones, John Smith, George King, Wilma Abby]
y a una lista donde la última coma es una o
Fed Jones, John Smith, George King or Wilma Abby
Pensé que REReplace podría funcionar, pero aún no he encontrado la expresión correcta.
Otra opción es trabajar con una lista / cadena utilizando listLast y el método JAVA lastIndexOf () de la cadena de resultados.
<cfscript>
names = ["Fed Jones", "John Smith", "George King", "Wilma Abby"];
result = arraytoList(names,'', '');
last = listLast(result);
result = listLen(result) gt 1 ? mid(result, 1, result.lastIndexOf('','')) & '' or'' & last : result;
</cfscript>
<cfoutput>#result#</cfoutput>
Resultado:
Fed Jones, John Smith, George King o Wilma Abby
Sería más fácil de manipular en el nivel de matriz primero, antes de convertirlo en una lista.
names = ["Fed Jones", "John Smith", "George King", "Wilma Abby"];
lastIndex = arrayLen(names);
last = names[lastIndex];
arrayDeleteAt(names, lastIndex);
result = arrayToList(names, ", ") & " or " & last;
// result == "Fed Jones, John Smith, George King or Wilma Abby"
Si tienes una matriz, combinar el último elemento con una lista ArrayToList es la forma más sencilla (según la respuesta de Henry ).
Si lo tienes como una cadena, usar reubicar es un método válido, y funcionaría así:
<cfset Names = rereplace( Names , '',(?=[^,]+$)'' , '' or '' ) />
Lo cual dice que concuerde una coma, luego verifique (sin emparejar) que no haya más comas hasta el final de la cadena (que, por supuesto, solo se aplicará a la última coma, y por lo tanto será reemplazada).