繁体   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