ColdFusion-从标记之间的文本中删除空格

ColdFusion-从标记之间的文本中删除空格,coldfusion,Coldfusion,我有以下字符串 Brad Thorm signs for the <hash>All Blacks</hash> 标签之间可能不全是黑色,可能是任何东西。我需要解析此字符串,以便在遇到标记时: 从标记之间的字符串中删除所有空格,即所有黑色应变为所有黑色 在标签之间的字符串前面添加一个符号,即AllBlacks变为AllBlacks 正在寻找最干净的方法来完成此操作。可能有更干净的方法来完成此操作,但这会将标记之间的任何文本转换为哈希标记,并在字符串中处理多个标记 <

我有以下字符串

Brad Thorm signs for the <hash>All Blacks</hash>
标签之间可能不全是黑色,可能是任何东西。我需要解析此字符串,以便在遇到标记时:

从标记之间的字符串中删除所有空格,即所有黑色应变为所有黑色 在标签之间的字符串前面添加一个符号,即AllBlacks变为AllBlacks
正在寻找最干净的方法来完成此操作。

可能有更干净的方法来完成此操作,但这会将标记之间的任何文本转换为哈希标记,并在字符串中处理多个标记

<cfscript>
text = "<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>";
matches = rematch("<hash>(.*?)</hash>", text);
for(match in matches) {
    hashtag = reReplace(match, "<hash>(.*?)</hash>", "\1");
    hashtag = reReplace(hashtag, "\W", "", "all");
    hashtag = "##" & hashtag;
    text = replace(text, match, hashtag);
}

writeoutput(text);
</cfscript>

可能有更简洁的方法可以做到这一点,但这会将标记之间的任何文本转换为hashtag,并在一个字符串中处理多个标记

<cfscript>
text = "<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>";
matches = rematch("<hash>(.*?)</hash>", text);
for(match in matches) {
    hashtag = reReplace(match, "<hash>(.*?)</hash>", "\1");
    hashtag = reReplace(hashtag, "\W", "", "all");
    hashtag = "##" & hashtag;
    text = replace(text, match, hashtag);
}

writeoutput(text);
</cfscript>

将Chris的代码重新编写成函数并循环数组,这适用于所提供字符串中的多个哈希实例:

<cffunction name="renderHash" output="false" returnType="string">
    <cfargument name="text" required="true" type="string" hint="The text to render." />
        <cfset var strText      = arguments.text />
        <cfset var strHash      = '' />
        <cfset var arrMatches   = reMatch("<hash>(.*?)</hash>", arguments.text) />
            <cfloop array="#arrMatches#" index="i">
                <cfset strHash = reReplace(i, "<hash>(.*?)</hash>", "\1") />
                <cfset strHash = reReplace(strHash, "[[:space:]]", "", "ALL") />    
                <cfset strHash = "##" & strHash />
                <cfset strText = replace(strText, i, strHash) />
            </cfloop>
    <cfreturn strText />
</cffunction>
将字符串传递到函数中,即可完成以下操作:

<cfset strText = '<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>' />
<cfset strConverted = renderHash(strText) />

将Chris的代码重新编写成函数并循环数组,这适用于所提供字符串中的多个哈希实例:

<cffunction name="renderHash" output="false" returnType="string">
    <cfargument name="text" required="true" type="string" hint="The text to render." />
        <cfset var strText      = arguments.text />
        <cfset var strHash      = '' />
        <cfset var arrMatches   = reMatch("<hash>(.*?)</hash>", arguments.text) />
            <cfloop array="#arrMatches#" index="i">
                <cfset strHash = reReplace(i, "<hash>(.*?)</hash>", "\1") />
                <cfset strHash = reReplace(strHash, "[[:space:]]", "", "ALL") />    
                <cfset strHash = "##" & strHash />
                <cfset strText = replace(strText, i, strHash) />
            </cfloop>
    <cfreturn strText />
</cffunction>
将字符串传递到函数中,即可完成以下操作:

<cfset strText = '<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>' />
<cfset strConverted = renderHash(strText) />

谢谢Chris,比赛中的formatch失败了。我认为这是因为matches是一个数组,而不是一个结构。您没有说您使用的是哪个版本的CF,因为在CF9+中支持数组内循环。Matt将我的代码转换为基于标记的函数应该对你有用。谢谢Chris,它在匹配中的formatch失败了。我认为这是因为matches是一个数组,而不是一个结构。您没有说您使用的是哪个版本的CF,因为在CF9+中支持数组内循环。Matt将我的代码转换为基于标记的函数应该对你有用。我确实想过将其作为函数来表示,但你必须让人们自己做一些事情;请注意,matt的代码只删除空格,而我的原始代码删除任何非单词字符。根据这些内容是如何生成的,你需要决定哪一个是合适的,我确实想过将其作为一个函数来呈现,但你必须让人们自己做一些事情;请注意,matt的代码只删除空格,而我的原始代码删除任何非单词字符。根据这些内容的生成方式,您需要决定哪一个是合适的