2011-11-23 23 views
0

方案A文本追加到onclick属性中的锚标记:您如何使用正则表达式

考虑以下字符串:

<a href="#" name="xy" onclick="alert('hello');">test</a> 

...我想用正则表达式(替换)追加一些文本(即:警报(“再见”);),以onclick属性,并与一个锚定标记看起来如下结束:

<a href="#" name="xy" onclick="alert('hello');alert('goodbye');">test</a> 

情形B:

考虑以下字符串(注意onclick属性丢失):

<a href="#" name="xy">test</a> 

...我想再次使用正则表达式来确定的onclick缺失和插入一些值的属性(即:警报( '你好'); )与锚标签(如下所示)结束了绳子:

<a href="#" name="xy" onclick="alert('hello');">test</a> 

我编码在C#中

什么正则表达式做我用它来做到这一点?使用正则表达式是解决此问题的好方法吗?

+0

您好,我错过了问题在这里。你尝试过吗?你在哪里被封锁? –

+0

你甚至可以使用正则表达式来完成这个任务吗?如果是这样,正则表达式会是什么样子?我不熟悉正则表达式。 – jsteele

回答

0

下面是一个例子使用正则表达式,这是假定字符串将按照格式张贴在你的榜样,也将有每串不超过一个链接HTML标签 -

void Main() 
{ 
    //var link = ""; 
    var link = @"<a href=""#"" name=""xy"" onclick=""alert('hello');alert('goodbye');"">test</a>"; 
    var link2 = @"<a href=""#"" name=""xy"">test</a>"; 

    string s = AddJS(link,"alert('inserted');"); 
    string s2 = AddJS(link2,"alert('inserted');"); 

    Console.WriteLine(s); 
    Console.WriteLine(s2); 

} 

string AddJS(string link,string js) { 
    if (link.IndexOf("onclick") > -1) return Regex.Replace(link, "(onclick=\".*)?(\")(>)", @"$1" + js + @""">"); 
    else return Regex.Replace(link, "(onclick=\".*)?(\")(>)", @""" onclick=""" + js + @""">"); 
} 
+0

谢谢,这工作得很好。 – jsteele

0

假设格式很简单,不需要正则表达式。

这段代码在快速测试工作只是罚款:

string sHTML = "<a href=\"#\" name=\"xy\">test</a>"; //onclick=\"alert('hello');\" 
int pushAtIndex; 
int index1 = sHTML.ToLower().IndexOf("onclick="); 
if (index1 > 0) 
{ 
    pushAtIndex = sHTML.IndexOf(";", index1) + 1; 
    if (pushAtIndex < 0) 
     pushAtIndex = sHTML.IndexOf("\"", index1) + 1; 
    if (pushAtIndex < 0) 
     pushAtIndex = sHTML.IndexOf("'", index1) + 1; 
    if (pushAtIndex > 0) 
     sHTML = sHTML.Insert(pushAtIndex, "alert('goodbye');"); 
} 
else 
{ 
    pushAtIndex = sHTML.IndexOf(">"); 
    if (pushAtIndex > 0) 
     sHTML = sHTML.Insert(pushAtIndex, " onclick=\"alert('goodbye');\""); 
} 

MessageBox.Show(sHTML); 

这将只是看onclick=字符串中,那么分号前推alert如果不存在,或以其他方式报价。如果找不到onclick=,则会在锚点的>之前推动整个onclick

+0

这工作,但正如你注意到它不使用正则表达式。如果可能,我的首选是使用正则表达式的解决方案。谢谢。 – jsteele

+0

你为什么如此渴望使用正则表达式?任何原因? –

+0

没有特别的理由。 – jsteele