REGEX链接显示文本内的术语

问题描述

| 我有一个继承的应用程序,可以在显示的文本内动态构建HREF链接。直到我们最近进行了数据库更改,并且链接的术语列表开始以不同的顺序从查询中返回之前,一切似乎都工作良好。这暴露了现有REGEX中的一个错误,该错误试图将HREF链接放置在预先存在的HREF中。仅仅强行在条款列表上进行新的排序是不可行的。一个术语可能只是一个单词,可能是多个单词,甚至可能是使用HTML格式化的单词。 我需要在REGEX中进行哪些调整,以使其忽略A元素的HREF属性中的术语?这是我所指的示例:
<cfset Output   = \"This is some sample text to show the problem when we have term1 term2.\" />

<cfloop index=\"w\" list=\"sample;term1 term2;term1\" delimiters=\";\">
    <cfset Output   = \".\" & Variables.Output & \".\" />

    <cfset Output = REReplaceNoCase(Variables.Output,\"(?![</]#w#>)(\\W)(#w#)(\\W)\",\"\\1<a href=\"\"display.cfm?Term=#urlencodedformat(w)#\"\">\\2</a>\\3\",\"one\") />

    <cfset Output   = Mid(Variables.Output,2,Len(Variables.Output)-2) />
</cfloop>

<cfoutput>#Variables.Output#</cfoutput>
    

解决方法

        将正则表达式中的第一个(\\ W)更改为([^ = \\ w>]),第二个更改为([^ = \\ w <])
<cfset Output = REReplaceNoCase(Variables.Output,\"(?![</]#w#>)([^=\\w>])(#w#)([^=\\w<])\",\"\\1<a href=\"\"Display.cfm?Term=#urlencodedformat(w)#\"\">\\2</a>\\3\",\"one\") />