2

过去一天左右我一直在研究这个 RegEx,我想我已经解决了它,以便它返回我想要的数据。首先是一点背景。

我有一个内容编辑器,用户可以编辑网页。他们可以格式化文本、添加链接等。标准内容编辑器的东西。当他们单击保存时,编辑器提供了获取内容 (editor.Content) 并将其放入字符串的能力。我想要做的是获取任何链接(<a>标签)并找出它们是内部链接还是外部链接以及它们是否是 PDF 文件。

这是我想出的表达式:

<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\']

有了这个,我可以将域(如果有的话)和路径分开。然后,我遍历比赛......

dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString)
For Each m as Match in matchColl
   If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then
       'this is an external domain... do some stuff
   End If
   If m.Groups("path").value.EndsWith(".pdf") then
         'it is a pdf, do some other stuff...
   End if
Next

我的问题是……我对这些值“做一些事情”的部分,将其恢复到我的“editorContent”字符串的最佳方法是什么?我可能可以将 editorContent 放入 StringBuilder 并对其进行大量替换,但这是否非常有效?

因此,例如,对于 PDF,我想指定它在新窗口中打开 (target="_blank"),对于外部 URL,将一些 javascript 代码添加到 onclick 属性中。

任何想法都会很棒!

谢谢!

4

1 回答 1

3

我想你想做 aRegex.Replace并传入 a MatchEvaluator。基本上,MatchEvaluator它是返回替换字符串的函数的委托。

于 2009-03-05T17:55:17.977 回答