开发者

REGEX to link terms within displayed text

I have an application that I have inherited that dynamically builds HREF links within the displayed text. All seemed to be worki开发者_Go百科ng well until we recently did a database change and our list of terms to link started to get returned from the query in a different order. This exposed a bug within the existing REGEX where it tries to place an HREF link within a preexisting HREF. Simply forcing a new ordering on the terms list is not an option. A term could be just one word, could be multiple words and even could be words formatted using HTML.

What would I need to adjust within the REGEX so that it ignores terms within the HREF attribute of an A element? Here is an example of what I am referring to:

<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>


Change the first (\W) in the regex to ([^=\w>]) and the second to ([^=\w<])

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜