我正在使用cfhttp
调用一个页面,此页面在此页面中有非常不同的详细信息,因为它使用脚本标记导航到下一页,我无法使用我的代码找到该内容:
这里的代码如下:
//window.location.replace("gen.asp?pagenum=-1" );
//window.location.replace("Wait.asp?Request("stateQ") & "&PDF=T" );
//window.location.replace("Gen.asp?stateQ=");
window.location.replace("GenA.asp?companyid=&stateQ=");
正如你在这里看到的那样有3个window.replace
我希望获取一个未注释的那个并将https://添加到它,因为使用url它只显示404错误,因为它尝试附加我的https://url此文件无法找到,
我使用cfhttp作为:
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfoutput>#objget.filecontent#</cfoutput>
<cfif rereplacenocase('^[window.location.replace]$')>
但不确定如何继续前进
答案 0 :(得分:0)
我对你的目标非常困惑,但我觉得这样的事情会起作用。
您似乎正在尝试像ReFind一样使用ReReplace。我会告诉你:
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfif ReFind("(GenA.asp\?companyid=(\d*)&stateQ=(\w*))",object.filecontent)>
<cfset repcontent = ReReplaceNoCase(object.filecontent,"(GenA.asp\?companyid=(\d*)&stateQ=(\w*)","https://...stuff/\1","ALL")>
</cfif>
但是,在这种情况下不需要ReFind,如果rereplace无法匹配,则返回与替换之前相同的变量。 (ReFind()
在您只想检查值是否存在的位置或while
循环中是好的。)
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfset repcontent = ReReplaceNoCase(object.filecontent,"(GenA.asp\?companyid=(\d*)&stateQ=(\w*)","https://...stuff/\1","ALL")>
这更有效,因为不需要if,因此没有性能开销。
两者都做了一些假设,但我不确定url是否为空值,因此无论价值如何,我都会告诉你如何进行替换。
(\d*)
(作为公司ID的值)表示任意数量的数字,0或更多。如果它不是数值,则可以更改(\w*)
(因为stateQ的值意味着字母,数字或下划线,任意次。\
。这不是拼写错误,问号是正则表达式中的特殊字符所以你必须逃避它。假设值比这更复杂,因为你可以将它们更改为([^&]*)
,例如,这意味着“除了符号之外的任何字符,0次或更多次。”
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfset repcontent = ReReplaceNoCase(object.filecontent,"(GenA.asp\?companyid=([^&]*)&stateQ=([^&]*)","https://...stuff/\1","ALL")>
或者,如果该值与您展示的一样,
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfset repcontent = ReplaceNoCase(object.filecontent,"GenA.asp?companyid=&stateQ=","https://...stuff/GenA.asp?companyid=&stateQ=","ALL")>
答案 1 :(得分:0)
您希望在ColdFusion正则表达式中使用多行模式,以避免匹配以//
注释开头的行,例如:
<cfset newcontent = REReplaceNoCase(objget.fileContent, "(?m)^(window\.location\.replace\("")(GenA\.asp\?companyid=&stateQ=)(""\);)$", "\1https://<myurl>/\2\3") />
请注意使用捕获组。第一组\1
将捕获window.location.replace("
;第二个\2
您希望使用https://
网址捕获和替换的网址;第三个\3
");
。起始锚^
确保我们只抓取以window.location...
开头的行,并避免那些被注释掉的行。多行模式参数(?m)
允许这样做,因此锚点^
和$
分别匹配行的开头和结尾,而不是字符串的开头和结尾。此参数的替代方法是使用Java正则表达式并使用负向lookbehind (?!<//)
。