img 标签如何去掉无用的属性 求一正则表达式,能去掉img 标签里的 width="xxx" alt="" 之类的属性,最后只剩下src属性比如<img width="123" alt="" src="xxx.jpg" height="456" /> 替换后变成<img src="xxx.jpg" /> 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 去掉的一般有 width,height,style,alt 或许有时候还有其他的algin这些 不用正则: string s = "<img width='123' alt='' src='xxx.jpg' height='456' />"; string result=""; string[] items = s.Split(' '); for (int i = 0; i < items.Length; i++) if (items[i].IndexOf("src=") > -1) result = "<img " + items[i] + " />"; div1.InnerText = result; } dalmeeme 的解决方案让我眼前一亮,不过在一段html中,img标签可能不止一个。似乎还得要正则啊 不建议用正则,应该依赖DOM来处理。 把所有的img的src给取出来,放到<img src里面来js应该可以做把 没有做 感觉是没有问题的 没用正则,直接写了个算法: string s = "<img width='123' alt='' src='xxx.jpg' height='456' /><div></div><img alt='33' src='abc.gif'/><p>img src</p>"; string result = ""; int flag = 0,flagSrc=0; char[] c = s.ToCharArray(); for (int i = 0; i < c.Length; i++) { if (flag == 0 && c[i] == '<') { flag = 1; continue; } if (flag == 1 && c[i] == 'i') { flag = 2; continue; } if (flag == 2 && c[i] == 'm') { flag = 3; continue; } if (flag == 3 && c[i] == 'g') { flag = 4; continue; } if (flag == 4 && c[i] == ' ') { flag = 100; continue; } if (flag == 100 && c[i] == '/') { flag = 101; continue; } if (flag == 101 && c[i] == '>') { flag = 0; continue; } if (flag == 100 && c[i] == 's') { flagSrc = 1; continue; } if (flagSrc == 1 && c[i] == 'r') { flagSrc = 2; continue; } if (flagSrc == 2 && c[i] == 'c') { flagSrc = 3; continue; } if (flagSrc == 3 && c[i] == '=') { flagSrc = 100; continue; } if (flagSrc==100) { c[i-1]='='; c[i-2]='c'; c[i-3]='r'; c[i-4]='s'; flagSrc = 101; } if (flagSrc == 101 && c[i] == ' ') { flagSrc = 0; continue; } if(flag==100&&flagSrc==0) c[i] = '\0'; } result = new string(c); div1.InnerText = result; 楼上误会cfx的意思了其实正则也不过就是有穷状态机的一种实现只要明确了要处理字符串的规律,完全可以自己实现状态机,有时候运行效率会比正则高,只不过开发效率可能没有正则高罢了Regex reg = new Regex(@"(?i)<img[^>]*?(src=(['""]?)[^'""\s>]+\2)[^>]*>");string result = reg.Replace(yourStr, "<img $1>"); 比如,上次有人问,不用循环,去搜索数据。有人给出了LINQ。其实LINQ内部还是循环。再比如,有人考虑实现一个ADO连接池,想法很好,不过这么做不会改善性能,为什么呢?因为底层人家已经实现了。我的意思是,对于所用的技术,知其然,更要知其所以然。 lxcnn 实现的最简洁,dalmeeme 最初的算法也提醒我们,有时可以从正则跳出来。结贴。 Gridview中设置网格线没有反应,急急急!在线等 SqlParameter问题 关于asp.net的问题 关于Server.Transfer的几个问题(帮顶有分) 有什么好办法能先出页面再出结果? 两个小问题,如何控制response.write()输出文本的位置,如何扩大设计模式页面的大小 高手求教!!如何asp.net中使用FileUpload控件上传文件!!急急急! 为什么建不了asp.net web应用程序啊??? 還是WORDTOHTML的問題,請指教。 请教高高手!!!!!!!!!!!!!! 日期函数datediff输出问题 ajaxpro2.dll 两处调用了后台的方法。
string s = "<img width='123' alt='' src='xxx.jpg' height='456' />";
string result="";
string[] items = s.Split(' ');
for (int i = 0; i < items.Length; i++)
if (items[i].IndexOf("src=") > -1)
result = "<img " + items[i] + " />";
div1.InnerText = result;
}
js应该可以做把 没有做 感觉是没有问题的
string s = "<img width='123' alt='' src='xxx.jpg' height='456' /><div></div><img alt='33' src='abc.gif'/><p>img src</p>";
string result = "";
int flag = 0,flagSrc=0;
char[] c = s.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (flag == 0 && c[i] == '<')
{
flag = 1;
continue;
}
if (flag == 1 && c[i] == 'i')
{
flag = 2;
continue;
}
if (flag == 2 && c[i] == 'm')
{
flag = 3;
continue;
}
if (flag == 3 && c[i] == 'g')
{
flag = 4;
continue;
}
if (flag == 4 && c[i] == ' ')
{
flag = 100;
continue;
}
if (flag == 100 && c[i] == '/')
{
flag = 101;
continue;
}
if (flag == 101 && c[i] == '>')
{
flag = 0;
continue;
}
if (flag == 100 && c[i] == 's')
{
flagSrc = 1;
continue;
}
if (flagSrc == 1 && c[i] == 'r')
{
flagSrc = 2;
continue;
}
if (flagSrc == 2 && c[i] == 'c')
{
flagSrc = 3;
continue;
}
if (flagSrc == 3 && c[i] == '=')
{
flagSrc = 100;
continue;
}
if (flagSrc==100)
{
c[i-1]='=';
c[i-2]='c';
c[i-3]='r';
c[i-4]='s';
flagSrc = 101;
}
if (flagSrc == 101 && c[i] == ' ')
{
flagSrc = 0;
continue;
}
if(flag==100&&flagSrc==0)
c[i] = '\0';
}
result = new string(c);
div1.InnerText = result;
只要明确了要处理字符串的规律,完全可以自己实现状态机,有时候运行效率会比正则高,只不过开发效率可能没有正则高罢了Regex reg = new Regex(@"(?i)<img[^>]*?(src=(['""]?)[^'""\s>]+\2)[^>]*>");
string result = reg.Replace(yourStr, "<img $1>");
有人给出了LINQ。其实LINQ内部还是循环。再比如,有人考虑实现一个ADO连接池,想法很好,不过这么做不会改善性能,为什么呢?因为底层人家已经实现了。我的意思是,对于所用的技术,知其然,更要知其所以然。
结贴。