我正在研究一个 ASP.NET 响应过滤器,它在特定情况下重写 URL 以指向不同的域。
因为 ASP.NET 将响应写入分块,所以在页面完全流式传输之前,我的过滤器会被调用多次。这意味着我需要注意每次对 Regex.Replace 的调用都不会双重替换 url(你最终会得到http://foo.comhttp://foo.com/path)。
为此,我尝试对替换使用否定的后向表达式,但它似乎不起作用:
content = Regex.Replace(content,"((?<!" + newDomain + ")" + match + ")", newDomain + match);
这将创建一个正则表达式,如:
((?<!http://www.foo.com/)actual/url)
然而,它似乎不尊重后面的样子,我把所有东西都换了。
有任何想法吗?
编辑:当我使用像 Regex Coach 这样的工具对样本数据进行测试时,这个正则表达式效果很好。
编辑2:添加了斜线,它实际上就在那里。