Metni ayrıştırmak için tarayıcının kendisini kullanmayı, herhangi bir DOM düğümünün inşa edilip edilmediğini belirlemeyi içeren, bu da ... yavaş olacak süslü çözümler var. Veya daha hızlı olacak, ancak… potansiyel olarak yanlış olan normal ifadeler. Ayrıca bu sorundan kaynaklanan iki çok farklı soru vardır:
S1: Bir dizge HTML parçaları içeriyor mu?
Dize , HTML öğesi biçimlendirmesi veya kodlanmış varlıklar içeren bir HTML belgesinin parçası mı ? Bu, dizinin ağartma / temizleme veya varlık kod çözme gerektirebileceğinin bir göstergesi olarak kullanılabilir:
/</?[a-z][^>]*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);/
Görebilirsiniz kullanımda bu deseni bu yazının yazıldığı anda mevcut tüm cevaplar örneklerle tüm karşı, artı bazı ... oldukça çirkin WYSIWYG- veya Word tarafından oluşturulan örnek metin ve karakter varlık referansları çeşitli.
S2: Dize bir HTML belgesi mi?
HTML spesifikasyonu şok edici bir HTML belgesi gördüğü ne olduğu gevşek olduğu . Tarayıcılar, neredeyse her türlü çöp metnini HTML olarak ayrıştırmak için aşırı uzunluklara gider. İki yaklaşım: ya sadece HTML'yi göz önünde bulundurun (çünkü bir text/htmlİçerik Türü ile teslim edilirse , kullanıcı aracısı tarafından HTML olarak yorumlanmaya çalışmak için büyük çaba harcanacaktır ) ya da önek işaretini arayın:
<!DOCTYPE html>
"İyi biçimlilik" açısından, bu ve neredeyse hiçbir şey "gerekli" değildir. Aşağıda, atlandığını düşündüğünüz her HTML öğesini içeren % 100 eksiksiz, tamamen geçerli bir HTML belgesi verilmiştir :
<!DOCTYPE html>
<title>Yes, really.</title>
<p>This is everything you need.
Evet. Orada gibi "eksik" elemanlarını oluşturmak için nasıl açık kurallar vardır <html>, <head>ve <body>. SO'nun sözdizimi vurgulamasının, açık bir ipucu olmadan bunu düzgün bir şekilde tespit edememesini oldukça eğlenceli buluyorum.