我们在网页上有这些文字
一些等等等等等等## page1234.asp ::链接##中的文字然后再写一些等等
语法是双重哈希,然后是链接,然后是双冒号,然后是要单击的文本,然后再次使用双重哈希结束链接,如:
##[url]::[visible text]##
##[url]::[visible text]::[title]##
其中[title]是用于SEO优化的鼠标悬停文本。不是最花哨的解决方案,但它已经工作了多年,并且不会随着时间的推移而改变。
我想要的是加快检测/替换功能以使用RegEx代替"手动"让vbscript / ASP浏览所有这些文件并进行instr和替换。
我的问题是使用RegEx构建模式,将用真实的HTML替换它们,包括
<a href="[url]" title="[title]">[visible text]</a>
或我可以使用的数组,然后执行搜索和替换。
所以我的首要任务是了解RegEx匹配模式,以便找到
"##<text>::<text>##" or "##<text>::<text>::<text>##"
然后返回整行,或者如果可能的话也返回实际的html插入。 我的猜测是两个不同的RegEx匹配一个有2个变量,一个有3个..
根据Sam的正则表达式更新代码
dim oRegEx, sText
Set oRegEx = New RegExp
oRegEx.Pattern = "##(.*?)::(.*?)(?:::(.*?))?##"
oRegEx.Global = true
sText ="foo ##page1234.asp::visible text## bar ##page1234.xml::visible text::title## bar"
sText = oRegEx.replace( sText, "<a href=""$1"" title=""$3"">$2</a>")
response.Write(sText)
必须将/ 1更改为$ 1才能使其在vbscript环境中正常工作。但其他一切都立即奏效。
感谢社区!
答案 0 :(得分:2)
查找
##(.*?)::(.*?)(?:::(.*?))?##
替换:
<a href="$1" title="$3">$2<a>
首先请注意,我只创建了一个表达式。如果缺少可选的title属性(第三个捕获组),我们将有一个空的title属性(<a href="page.asp" title="">
)。
现在让我们展开表达式:
## ?# literally match ##
(.*?) ?# lazily capture 0+ characters
:: ?# literally match ::
(.*?) ?# lazily capture 0+ characters
(?: ?# begin optional non-capturing group
:: ?# literally match ::
(.*?) ?# lazily capture 0+ characters
)? ?# end optional non-capturing group
## ?# literally match ##