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