我的意思是每个<
应该有一个合适的>
。没有任何<
或>
的字符串也应该有效。
有什么想法吗?
答案 0 :(得分:0)
如果有两个连续的开始或结束括号,并且它们之间只有非括号字符,那么您的字符串将有一个未正确打开或关闭的标记。
将匹配这些<(?=[^>]*<)|>(?=[^<]*>)
请注意,这只能在没有脚本部分或注释的html上可靠地运行!此外,这只会检查括号。它不会检查您打开的每个标签是否再次关闭。 (即它会将<<a>
视为错误,但不会<a></b>
)
答案 1 :(得分:0)
有一次,我创建了一个JavaScript BB代码解析器,它也处理了错误关闭的标签。相同的概念也适用于HTML(以及依赖树的任何其他标记语言)。
var string = ""; var lastIndex = 0; var stack = []; var parsedString = ""///And some more
<
string.indexOf("<", lastIndex)
匹配为止
>
(使用RE:/[^<]+?/
)。将lastIndex
设置为此>
的索引加上1。var stack = [];
)。stack
的最后一个元素,请使用stack.pop()
。继续1。</div>
应关闭任何<div>
,即使您必须丢弃9001 <span>
声明。)<strong>
不如<div>
重要。<div>
),而结束标记为</em>
,请忽略结束标记并返回1. 如果1评估为false
(未找到<
),请将剩余字符串添加到结果resultString += string.substring(lastIndex, string.length);
。
执行这些步骤后,您已经解析了一个字符串。