正则表达式总让我头疼。
在我的Windows应用商店应用中,需要将html内容<a href="www.example.com">
替换为<a href="javascript:window.external.notify('www.example.com')">
才能拦截WebView中的导航事件。
我试过Regex.Replace(content, "<a href=\"(.+)\">", "<a href=\"javascript:window.external.notify('\\0')\">");
但没有运气。
你能教我如何在C#中做到吗?
答案 0 :(得分:1)
这应该适合你:
using System;
using System.Text.RegularExpressions;
namespace CSTest
{
class Program
{
static void Main(string[] args)
{
Regex re = new Regex("<a href=\"(.+)\">", RegexOptions.Compiled);
string input = "<a href=\"www.example.com\">";
string res = re.Replace(input,
"<a href=\"javascript:window.external.notify('$1')\">");
Console.WriteLine(res);
}
}
}
你几乎拥有它。您唯一的问题是您使用\\0
代替$1
匹配的群组。
如果您希望拨打Regex.Replace
的静态版本,可以使用:
string res = Regex.Replace(input,
"<a href=\"(.+)\">",
"<a href=\"javascript:window.external.notify('$1')\">",
RegexOptions.Compiled
);
答案 1 :(得分:1)
我会尝试这样的东西:
Regex.Replace(content, "(?<=<a href=\").+(?=\">)", "javascript:window.external.notify('$0')");
答案 2 :(得分:0)
您应该使用$1
代替\\0
。
我们在c#中使用$
进行反向引用。