簡體   English   中英

正則表達式以比較html標記內的變量

[英]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 彈出adiv不匹配的,

它看起來像

[<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM