如何使用RegEx将文本附加到锚点标记中的onClick属性
本文关键字:属性 onClick RegEx 何使用 文本 | 更新日期: 2023-09-27 18:15:27
场景A:
给定以下字符串:
<a href="#" name="xy" onclick="alert('hello');">test</a>
我想使用正则表达式(Replace(来附加一些文本(例如:alert('goodbey'(;(到onclick属性,最后得到一个如下所示的锚点标记:
<a href="#" name="xy" onclick="alert('hello');alert('goodbye');">test</a>
场景B:
给定以下字符串(注意onclick属性丢失(:
<a href="#" name="xy">test</a>
我想再次使用RegEx来确定onclick丢失,并插入具有某个值的属性(即:alert('hello'(;(到字符串中,最后显示一个锚标记,如下所示:
<a href="#" name="xy" onclick="alert('hello');">test</a>
我在c#中编码
我使用什么正则表达式来实现这一点?使用正则表达式是解决这个问题的好方法吗?
这里有一个使用正则表达式的示例,它假设字符串将遵循示例中发布的格式,并且每个字符串不会有超过一个链接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 + @""">");
}
不需要正则表达式,假设格式很简单。
此代码在快速测试中运行良好:
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
。