<script language="JavaScript">
<!--
var str1="<PName Type=\"String\" Host=\"LocalHost\"><![CDATA[测试]]></PName>";
var re = /\<(\w+) ([^\>]*?)\>(.*?)<\/\1>/if(re.test(str1))
{
var s = str1.match(re);
var t = /Type\=\"([^\"]*?)\"/
var tt;
if(t.test(s[2]))
{
var type = s[2].match(t);
tt = type[1];
alert("类型:" + type[1]);
}
else
{ alert("空类型");
} alert("<" + s[1] + " Type=\"" + tt + "\">" + s[3] + "</" + s[1] + ">");}//-->
</script>//随便写了下,你再改改吧
<!--
var str1="<PName Type=\"String\" Host=\"LocalHost\"><![CDATA[测试]]></PName>";
var re = /\<(\w+) ([^\>]*?)\>(.*?)<\/\1>/if(re.test(str1))
{
var s = str1.match(re);
var t = /Type\=\"([^\"]*?)\"/
var tt;
if(t.test(s[2]))
{
var type = s[2].match(t);
tt = type[1];
alert("类型:" + type[1]);
}
else
{ alert("空类型");
} alert("<" + s[1] + " Type=\"" + tt + "\">" + s[3] + "</" + s[1] + ">");}//-->
</script>//随便写了下,你再改改吧
解决方案 »
- Project 3-10
- js设置网页在Iphone4S浏览器上的显示比例!
- 请问用javascript或者jquery怎么根据click事件和change事件获取RadioButtonList的选中值。。
- 如何让被拖的东西随便拖
- 高手请看看:JS动态增加行的onmouseout事件怎么写?
- 异窗口判断窗口加载问题?(ff通过)
- 关于数据返回格式,请指教
- 我有一个表格要输入,是4行5列的,
- 郁闷了,头已经昏了,帮忙看看吧!
- ajaxFileUpload在ie下返回data为false
- 如何修改梅花雨日历程序,使其只可以选择今日和未来两周的日期,其他的都不可选?
- 关于垂直方向!!!连续!!!滚动字幕?
不能用DOM
<!--
var str1="<PName Type=\"String\" Host=\"LocalHost\"><![CDATA[测试]]></PName>";
var re = /\<(\w+) ([^\>]*?)\>(.*?)<\/\1>/var s = str1.match(re);
if(s!=null)
{ var t = /Type\=\"([^\"]*?)\"/
var tt;
var type = s[2].match(t);
if(type!=null)
{
tt = type[1];
alert("类型:" + type[1]);
}
else
{
alert("空类型");
} var content = s[3].match(/<!\[CDATA\[(.*?)\]\]>/);
var c if(content!=null)
{
c = (content[1]);
}
else
{
c = s[3];
} alert("<" + s[1] + " Type=\"" + tt + "\">" + c + "</" + s[1] + ">");}//-->
</script>
节点的属性通常来说只有Type出现
我封装了一个XMLAttribute
节点的名称和属性名称规则是这样的:[a-z]((a-z0-9)+[\_])*[a-z]
现在在封装XMLNode的时候有点麻烦
你上面给的代码都可以使用,,但是扩展起来好像比较麻烦
其实我是想先把所有的属性都分析出来,放到一个对象数组里面
然后再挑出Type属性(Type属性在我的这个程序里面是“保留字”,呵呵)以后可能还有其他的保留字增加的,这样才方便
<!--
var str1="<PName type=\"String\" Host=\"LocalHost\"><![CDATA[测试]]></PName>";
var re = /\<(\w+) ([^\>]*?)\>(.*?)<\/\1>/var s = str1.match(re);
if(s!=null)
{ var arrtibutes_str = /(\w+)=\"([^\"]*?)\"/g var primary_attribute_value; primary_attribute_value = ''; var arrtibutes = s[2].match(arrtibutes_str);
if(arrtibutes!=null)
{
for(var i=0;i<arrtibutes.length;i++)
{
var arrtibute = arrtibutes[i].split('=');
if(arrtibute[0].toLowerCase()=="type")
{
primary_attribute_value = arrtibute[1];
} }
}
else
{
alert("空类型");
} var content = s[3].match(/<!\[CDATA\[(.*?)\]\]>/);
var c if(content!=null)
{
c = (content[1]);
}
else
{
c = s[3];
} alert("<" + s[1] + " Type=\"" + primary_attribute_value + "\">" + c + "</" + s[1] + ">");}//-->
</script>
不错不错,给你20分
辛苦了,不过你的代码在理想状况下完全正确,可下面这个就不行了var str1="<PName type=\"S>tring\" Host=\"LocalHo<st\"><![CDATA[测试]]></PName>";
看来我得考虑放弃正则了,只能自己一个字节一个字节的分析
{
var p = this.replace(/\s+=\s+/g, "="); if(p=="") return "";
var reg = new RegExp("(^| )"+ name +"(=|:)(\\\"|\\\')?([^\\3]*?)(\\3)( |>|$)", "i");
var r = p.match(reg); if (r!=null) return r[4]; return "";
};
String.prototype.meizz = function()
{
var type = this.getValue("type");
var PN = this.match(/<(\w+)/);
if(PN)
{
var a = this.match(/<!\[CDATA\[(.*?)\]\]>/);
var content = a ? a[1] : "";
return "<"+ PN[1] +" type=\""+ type +"\">"+ content +"<\/"+ PN[1] +">";
}
return "";
}
var str1="<PName type=\"String\" Host=\"LocalHost\"><![CDATA[测试]]></PName>";
var str2="<PName Type=\"String\"><![CDATA[测试]]></PName>";
var str3="<PName Type=\"String\">测试</PName>";
var str4="<PName>A</PName>";
var str5="<PName />";
var str6="<PName type=\"S>tring\" Host=\"LocalHo<st\"><![CDATA[测试]]></PName>";
alert(str1 +"\r\n"+ str1.meizz());
alert(str2 +"\r\n"+ str2.meizz());
alert(str3 +"\r\n"+ str3.meizz());
alert(str4 +"\r\n"+ str4.meizz());
alert(str5 +"\r\n"+ str5.meizz());
alert(str6 +"\r\n"+ str6.meizz());
我的正则功力还不行。。研究一下梅老大的吧。。
顺便顶一下帖子。