RegEx搜索和替换链接

时间:2014-09-11 18:06:19

标签: regex asp-classic

我们在网页上有这些文字

一些等等等等等等## 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环境中正常工作。但其他一切都立即奏效。

感谢社区!

1 个答案:

答案 0 :(得分:2)

查找

##(.*?)::(.*?)(?:::(.*?))?##

替换:

<a href="$1" title="$3">$2<a>

Demo


首先请注意,我只创建了一个表达式。如果缺少可选的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 ##