[英]regular expression to compare variables inside html tags
我一直在研究正則表達式的東西,並考慮我們有一個數組,其中的html標簽存儲為字符串。.如array=["</div>,"</a>", "<div id='test'>", "<a href='http://test/new.html'>", "</a>", "</div>", "<span style='color:#ffffff;'>"]
如果我們一個接一個地遍歷數組,
如果我們要檢測完整標簽和不完整標簽,例如<div>
被打開並且</div>
在此之后被關閉的位置..因此,這兩個都位於完整標簽下... <span>
被打開,但是永遠不會關閉,因此它位於不完整的打開標記下, </div>
首先處於關閉狀態,因此它位於不完整的關閉標記下。
可以使用JavaScript完成嗎?
對於教導Stack數據類型的實用程序來說,這聽起來像是一個很大的問題。 在Javascript中,所有陣列都使用堆棧功能,看到這里 。
你怎么做呢?
從一個空堆棧開始。 按順序循環遍歷數組的元素。 對於每個項目:
最后,完成陣列后,檢查堆棧是否為空。
例如:
[<div>, <a>, <span>, </span>, </div>, </a>]
將失敗。 推div
,推a
,推span
。 流行span
。 彈出a
與div
不匹配的,
它看起來像
[<div>, <a>, <span>, </span>, </a>, </div>]
該方法將通過,因為在方法結束時堆棧將為空(長度為0)。
編輯:如果要在單獨的步驟中使用正則表達式:
要確定標簽是否打開:
tag.match(/<\//) == null
這將檢查標簽是否包含字符<\\
要從標簽獲取內容:
var tagContent = tag.match(/\w+/)[0];
這將抓取一組文字字符。 具體來說,第一組。 它應該只獲取標記名,而忽略任何屬性,因為空格將結束表達式。 如果您全局匹配(其中將有多個匹配項),則Match始終返回一個數組,因此獲取返回數組的第0個索引以獲取值。
比較兩個標簽:
tag1Content == tag2Content
這嚴重不需要正則表達式。
var stack=new Array();
var stackCount = 0;
var array=["</div>","<div id='test'>", "<a href='http://test/new.html'>", "</a>", "</div>", "<span style='color:#ffffff;'>"];
for(var k=0;k<array.length;k++)
{
alert("Eleemnt Selected:" + array[k]);
if(stackCount==0)
{
if(array[k].match(/<\//)==null)
{
stack.push(array[k]);
stackCount++;
alert("Pushed in to the stack as stack is empty" + stack);
}
else
{
alert("Ignored as it is a tag containing slash");
}
}
else
{
var tagType1=array[k].match(/<\//);
var tagType2=stack[0].match(/<\//);
var cmpTag1=array[k].match(/\w+/);
var cmpTag2=stack[0].match(/\w+/);
//alert("Tag Type : Array element :" +tagType1 + "Stack element : " + tagType2 + "Tag Name: Array element : " + cmpTag1 + "Stack Element : " +cmpTag2);
if(cmpTag1!=cmpTag2 && tagType1!=tagType2)
{
stack.pop();
stackCount--;
alert("same Tags, so popped out from the stack" + stack);
}
else
{
stack.push(array[k]);
stackCount++;
alert("Pushed in to the stack as items compared are different");
}
}
}
Ive發布了我的答案...我已經嘗試過了,這就是我的位置...您身邊的任何反饋或改進之處??? 我擔心的部分是,因為它是封閉標簽,所以應該彈出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.