Я написал скрипку, которая добавляет функцию checkTags()
в jQuery - больше ничего не нужно делать, пока мой старый Mac восстанавливается, благодаря моему новому решению стать кирпичом.
http://jsfiddle.net/mhart/5XJ95/
Он проверяет строку, увеличивая счетчик тегов, когда видит открытие, и уменьшает, когда видит закрытие. Он просто сообщает вам, есть ли совпадения закрытия для открытий тега, но не проверяет позицию закрытия тега. Я мог бы разветвлять его и посмотреть, смогу ли я разработать функцию, которая также обрабатывает закрывающие позиции.
ОБНОВЛЕНО - Вот скрипка, которая проверяет правильность размещения корпуса, а также проверяет наличие всех закрывающих тегов
http://jsfiddle.net/mhart/MvzaN/
Вот функция
$.checkTags=function(text){
var tags = new Array();
var i=0;
var j=0;
var k=0;
var tag='';
var level=0;
i = text.indexOf('<');
while (i>=0) {
j = text.indexOf('>', i);
if (j == -1) break;
k = text.indexOf(' ',i);
if (k > i && k < j) {
tag = text.substr(i+1,k-i-1);
} else {
tag = text.substr(i+1,j-i-1);
}
if (tag.indexOf('/') == 0) {
tag = tag.substr(1);
tag += level;
if (tags[tag] == undefined) {
tags[tag] = -1;
} else {
tags[tag]--;
}
level--;
} else {
level++;
tag += level;
if (tags[tag] == undefined) {
tags[tag] = 1;
} else {
tags[tag]++;
}
}
console.log(tag);
i = text.indexOf('<',j);
}
// Everything should be zero
for (tag in tags) {
if (tags[tag] != 0) return false;
// console.log(tag + ',' + tags[tag]);
}
return true;
};