Потому что ReFind/NoCase()
не предназначен для возврата фактической подстроки, это примерно так же просто, как вы собираетесь получить.
<cfset data='<SCRIPT LANGUAGE="JavaScript" > //alert("a chance stuff"); document.location.href="https://mypage.cfm"; </SCRIPT>'>
<cfset ulink = reMatchNoCase("<SCRIPT.*?>.*?</SCRIPT>", data)>
<cfset link = Rematchnocase("http[^""']*",ulink[1])>
<cfoutput>#link[1]#</cfoutput>
Что немного проще, чем то, что вы делаете. В качестве альтернативы вы можете использовать Mid(ulink[1]...)
, но с подвыражениями от ReFindNoCase()
, но это также не проще.
Регулярное выражение, которое я использую для сопоставления с URL-адресом, является очень общим, но оно должно легко выполнять задачу. Он просто захватывает все, пока не найдет цитату или апостроф.
Я также думаю, что этот
<cfset data='<SCRIPT LANGUAGE="JavaScript" > //alert("a chance stuff"); document.location.href="https://mypage.cfm"; </SCRIPT>'>
<cfset ulink = rereplacenocase(data,"[\s\S]*?(<script.*?>[\s\S]*?(http[^""']*)[\s\S]*?</script>)[\s\S]*","\2","ALL")>
<cfoutput>#ulink#</cfoutput>
, который, возможно, лучше, но это так много неприятнее для чтения и является менее надежным для работы с несколькими <script>
тегов, если это должно возникнуть.
Лично я бы пошел с первым маршрутом. С RegEx, иногда «ленивее», которым вы пытаетесь стать, темнее становится все это. Лучше всего определить лучший образец, который вы можете достичь, и в ColdFusion, я считаю, что первый маршрут - лучший маршрут.
последний действительно работал thx –