您可以尝试以下操作。我不认为你甚至需要一个正则表达式:
<cfset html_content = replaceNoCase(request.oEntry.getHTMLStuff(), "<p class=""subsubhead""", "<p id=""#id#"" class=""subsubhead""", "All" />
<cfoutput>#html_content#</cfoutput>
注意双引号内的双双引号这样的字符串不破! replaceNoCase()
的最终参数值告诉CF来替换所有的事件。如果您希望在其他代码中替换此类的值,则省略<p
部分。这可能是最好在这种情况下使用正则表达式来避免更换任何内容(不匹配的机会很高,但你永远不知道):
<cfset html_content = REReplaceNoCase(request.oEntry.getHTMLStuff(), "(<[^>]+?)(class=\""subsubhead\"")([^>]*>)", "\1 id=""#id#"" \2 \3", "All") />
这只会在class="subsubhead"
与id="#id#" class="subsubhead"
取代(其中#id#
是一个CF变量的值)。
希望这会有所帮助。这就是ColdFusion快速简单的事情。
更新:你没有在OP中提到x
的值是否需要在每次匹配时递增;如果是这样的话,那么你会希望使用REFindNoCase()
与returnsubexpressions=true
(使用相同的正则表达式同上),然后通过len
和pos
阵列循环:
<cfset content_match = REFindNoCase(request.oEntry.getHTMLStuff(), "(<[^>]+?)(class=\""subsubhead\"")([^>]*>)", 1, true) />
<cfloop from="1" to="#arrayLen(content_match.pos)#" index="ii">
<!--- Do the replace in here --->
<cfset temp = mid(content_match, pos[ii], len[ii]) />
<cfset temp = replaceNoCase(temp, "class=""subsubhead""", "id=""#ii#"" class=""subsubhead""") />
<cfset content_match = removeChars(content_match, pos[ii], len[ii]) />
<cfset content_match = insert(temp, content_match, pos[ii]) />
</cfloop>
有可能是一个错误在关闭以上(我没有测试),但我认为这是一般的声音。
听起来好像您是从ColdFusion查询中生成HTML的。任何机会你可以张贴一些CF代码或解释如何生成HTML? – 2012-03-19 14:32:07
你想要SQL,jQuery或ColdFusion来完成这项工作吗?你是否真的想改变存储的数据,或者只是在浏览器中改变它? – 2012-03-19 14:33:49
HTML来自数据库,其中有人已经基本上将其复制并粘贴到文字区域。 Evik,我认为ColdFusion将不得不做这项工作,因为子标题id已经存储在variables.qsubheading而不是页面上的输入 – Jarede 2012-03-19 14:38:01