如何在ColdFusion中将一组值转换成最佳方式的数组
[ Fed Jones, John Smith, George King, Wilma Abby]
并且将其转换为最后一个逗号为或的列表
Fed Jones, John Smith, George King or Wilma Abby
我认为 REReplace 可能有效,但我还没有找到正确的表达式。
如何在ColdFusion中将一组值转换成最佳方式的数组
[ Fed Jones, John Smith, George King, Wilma Abby]
并且将其转换为最后一个逗号为或的列表
Fed Jones, John Smith, George King or Wilma Abby
我认为 REReplace 可能有效,但我还没有找到正确的表达式。
<cfset Names = rereplace( Names , ',(?=[^,]+$)' , ' or ' ) />
这句话的意思是匹配一个逗号,然后检查(不匹配)字符串末尾是否还有其他逗号(当然,这只适用于最后一个逗号,并将被替换)。
arrayToList()
函数并进行正则表达式替换,无需进行任何数组操作。当然,如果您正在处理"姓,名"类型的数组,例如 ["Jones, Fed", "Smith, John", "King, George", "Abby, Wilma"]
,那就是另外一回事了。 - Ketola在转换成列表之前,先在数组层次上操作会更容易。
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"
<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>
结果:
Fed Jones,John Smith,George King或Wilma Abby
mid(str,1,x)
可以写成 left(str,x)
:) - Peter BoughtonJavaCast
,但这里不适用,因为如果您已经执行了ArrayToList
,那么您就拥有了一个字符串。在已知字符串上调用lastIndexOf
是可以的,并且不会盲目调用。 - Peter Boughton