html 標簽是否匹配檢測代碼

<HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <SCRIPT LANGUAGE="javaScript"> <!-- //去掉字串中的空格 function NoSpace(txt){ return (txt.replace(/[\s]+/g,'')) } //判斷<aaa>與</aaa>是配對的html標簽 function IsGood(txt1,txt2){ var txt='<'+'/'+txt1.substr(1); return (txt==txt2)?1:0; } function chk(){ //s為模擬的html代碼 //var s="d<html>fg<table>sdfg<img><tr>asdfg<td>6456</td>dfg</tr>dsfg</table>d</html>fg"; var s=NoSpace(oT.value).toLowerCase(); var arrMinus=new Array('<img>','<input>','<meta>','<hr>'); for (var i=0;i<arrMinus.length;i++){ s=s.replace(arrMinus[i],''); } var arrElement=s.match(/<[/|A-Za-z]+>/ig);//取出所有的<....>格式的字串 var stack=new Array(); stack[0]='#';k=0;//定義一個順序棧,棧底放入#,k為棧頂指針 for (var j=0;j<arrElement.length;j++){ if (IsGood(stack[k],arrElement[j])) {k--;stack.length--;}//如果配對,棧頂元素出棧 else {stack[++k]=arrElement[j];}//如果不配對,新標簽入棧 alert(stack[k]);//演示棧頂的內容 } (stack[k]=="#")?(document.write("所有的標簽匹配")):(document.write("有的標簽不匹配")); } //--> </SCRIPT> <TEXTAREA NAME="oT" ROWS="10" COLS="90"> <HTML> <META> <HEAD> <TITLE> New Document </TITLE> </HEAD> <BODY> <img><input> </BODY> </HTML> </TEXTAREA> <BR><BR> 原理:建一個棧,每次碰到一個新標簽,就與棧頂的標簽配對,如果配對,棧頂的標簽就出棧,如果不配對,這個新標簽就進棧,最終,棧如果是空的,說明所有的標簽都是配對的,如果棧不空,說明有不配對的地方<BR> 框中是模擬的html代碼,你可以修改後,點下面的按鈕,看是不是匹配。<BR> 彈出的對話框是演示棧頂的內容<BR> 特點:<BR>1、還不能判斷<...>哪些是合法的html標簽,可以在代碼中直接輸入合法標簽,工作量太大。<BR>2、有的標簽是不需配對的,如<img>,代碼智能判斷為匹配的。<BR>3、目前還不支持標簽後加屬性 <BR><BR> <INPUT TYPE="button" value="Start" onclick="chk()"> </BODY> </HTML> [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]

② HTML中<%符號匹配的問題

<% %>裡面不能再套<% %>符號了。

<%= %> 的作用是向頁面輸入變數的值。

如果在<% %>裡面用變了就不用<%= %>這個,直接把變數寫到=後面就可以了。

如果前面用<%=arr.length()%>可以輸出,那麼你這段直接這樣寫就行了

var length = arr.length();

③ 寫一個正則,匹配html中所有的class

<script type="text/javascript">
//獲取的html內容不知道為什麼會有script標簽內的內容。。。。可以用jQuery試試
var str =document.getElementsByTagName("body")[0].innerHTML;
var strArr = str.match(/class="(\S*)"/g);

for(var i=0;i<strArr.length;i++){
document.write("Result: " + strArr[i]+"</br>");
}

</script>

④ 急求匹配HTML中指定內容的正則表達式

|用正則實現比較復雜,如果是.net平台的話,可以用平衡組完美實現。

<ul\s+id="list"\s+class="lsits">((((?!<ul\b|</ul>)[\s\S])*(?<open><ul\b[^>]*>))+(((?!<ul\b|</ul>)[\s\S])*(?<-open></ul>))+)*(?(open)(?!))((?!<ul\b|</ul>)[\s\S])*</ul>

解釋:
<ul\s+id=""list""\s+class=""lsits""> #匹配開頭的ul
((((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之間的字元
(?<open><ul\b[^>]*>))+ #匹配到<ul則進棧
(((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之間的字元
(?<-open></ul>))+ #匹配到</ul則出棧
)* #匹配可以重復N次
(?(open)(?!)) #判斷如果棧不為空,<ul>和</ul>數量不匹配則匹配失敗
((?!<ul\b|</ul>)[\s\S])*</ul> #匹配結尾的字元以及</ul>

這個正則式可以正確配對<ul>的,缺點是必須在C#.net VB.net等.net平台上運行。

如果不用.net,那麼沒有完美的方法。
但是如果你能確定<ul id="list" class="lsits">和</ul>之間有幾對嵌套的<ul>
或者如果沒有多重嵌套的正則的話,也可以有相應的嚴格正則。

我先就你上面的文本舉個例子:
<ul\s+id="list"\s+class="lsits">[\s\S]*?<ul\b[^>]*>[\s\S]*?</ul>[\s\S]*?</ul>
解釋:

<ul\s+id="list"\s+class="lsits">
[\s\S]*?<ul\b[^>]*>
[\s\S]*?</ul>
[\s\S]*?</ul>
因為你上面的文本里只嵌套了一個<ul>,所以我就只匹配這個ul,多了不要,問號表示懶惰匹配~

⑤ 如何匹配html節點

window.onload=function(){
varall=document.getElementsByTagName('*'),
a=null;
for(vari=0,len=all.length;i<len;i++){
if(/a/.test(all[i].id)){
a=all[i];
}
}

if(a){
alert(a.innerHTML);
}
}

⑥ 正則表達式怎麼匹配html標簽

/<[^>]*>/g
其實直接網路一下就可以找到更多細致的匹配方法了

⑦ 正則表達式匹配html標簽

給你一個例子,自己模仿著寫吧,
匹配一個div標簽的正則表達式:"<div>[^<]*</div>"這個基本可以滿足回,標簽答之間一般不會出現<,
如果要求嚴謹
完整的寫法應該是 「<div>[^<]*[^d]*[^i]*[^v]*[^>]*</div>」這個可以都匹配。
真實可用,望點贊。

⑧ 正則表達式在html中匹配數據

<td[^>]*>(\\d{3}-\\d{10})</td>
這個是java的正則,可以匹配「td標簽裡面的『3位數字-10位數字』」,非td標簽裡面的不算,不是3-10形式數字的不算。
其他語言的正則寫法同理。

⑨ 正則表達式匹配html

不知道你用的什麼語言,有支持正則替換的函數就行,給你java的做個參考

public static void main(String[] args) {
String s = ".<br><br><br>oh<a>no</a><br><br>my<br>god<hr><hr>";
System.out.println("old:" + s);
s = s.replaceAll("(<[^>]+>)\\1+", "$1");//看這里的替換正則就明白了
System.out.println("new:" + s);
}

輸出是:
old:.<br><br><br>oh<a>no</a><br><br>my<br>god<hr><hr>
new:.<br>oh<a>no</a><br>my<br>god<hr>