ตรวจสอบว่าสตริงเป็น html หรือไม่


103

ฉันมีสตริงที่ต้องการตรวจสอบว่าเป็น html หรือไม่ ฉันใช้ regex เหมือนกัน แต่ไม่ได้ผลลัพธ์ที่เหมาะสม

ผมตรวจสอบ regex ของฉันและมันทำงานได้ดีที่นี่

var htmlRegex = new RegExp("<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)</\1>");
return htmlRegex.test(testString);

นี่คือซอ แต่ regex ไม่ได้ทำงานอยู่ที่นั่น http://jsfiddle.net/wFWtc/

ในเครื่องของฉันรหัสทำงานได้ดี แต่ฉันได้ผลลัพธ์เป็นเท็จแทนที่จะเป็นจริง มีอะไรหายไปที่นี่?


5
ใช้โปรแกรมแยกวิเคราะห์ HTML เพื่อแยกวิเคราะห์ HTML โปรดอ่านสิ่งนี้หากคุณยังไม่ได้ทำ
Frédéric Hamidi

3
คำถามยังคงมาเรื่อย ๆ ควรมีสแต็คบอทที่จะตั้งความคิดเห็นในทุกคำถามด้วย html และ regex ในนั้น
Bartlomiej Lewandowski

3
มันขึ้นอยู่กับระดับความซับซ้อนที่คุณต้องการจากการตรวจสอบ คุณสามารถตรวจสอบว่าสตริงมีอย่างน้อยหนึ่งตัว<และอย่างน้อยหนึ่งตัว>และเรียกมันว่า HTML หรือคุณสามารถตรวจสอบว่าถูกต้องอย่างเคร่งครัดด้วยไวยากรณ์ HTML ที่ถูกต้องหรือมีอะไรจากระหว่างนั้น สำหรับกรณีที่ง่ายที่สุดไม่จำเป็นต้องใช้โปรแกรมแยกวิเคราะห์ HTML
JJJ

3
เหตุใดคุณจึงตรวจสอบสตริงเป็น HTML
nhahtdh

2
@ user1240679: รูปแบบมาร์กอัปถูกต้องหรือไม่ ความถูกต้องเป็นแบบไหน? ในแง่ที่เข้มงวดที่สุดคุณต้องใช้ DTD เพื่ออธิบาย ในแง่หนึ่งคุณอาจต้องการตรวจสอบว่าแท็กตรงกันอย่างถูกต้อง ทั้ง 2 กรณีข้างต้นไม่ใช่งานสำหรับ regex
nhahtdh

คำตอบ:


324

regex ที่ดีกว่าที่จะใช้ตรวจสอบว่าสตริงเป็น HTML หรือไม่:

/^/

ตัวอย่างเช่น:

/^/.test('') // true
/^/.test('foo bar baz') //true
/^/.test('<p>fizz buzz</p>') //true

ในความเป็นจริงมันเป็นเรื่องดีเพื่อที่มันจะกลับมาtrueสำหรับทุกข้อความที่ถูกส่งไปซึ่งเป็นเพราะทุกสตริงเป็น HTML อย่างจริงจังแม้ว่าจะมีรูปแบบไม่ดีหรือไม่ถูกต้อง แต่ก็ยังคงเป็น HTML

หากสิ่งที่คุณกำลังมองหาคือการมีอยู่ขององค์ประกอบ HTML แทนที่จะเป็นเพียงเนื้อหาข้อความใด ๆ คุณสามารถใช้บางสิ่งตามบรรทัดของ:

/<\/?[a-z][\s\S]*>/i.test()

มันจะไม่ช่วยคุณแยกวิเคราะห์ HTML แต่อย่างใด แต่จะตั้งค่าสถานะสตริงว่ามีองค์ประกอบ HTML


54
ฉันรู้สึกประหลาดใจจริงๆที่ฉันไม่ได้รับการโหวตลงคะแนนมากขึ้นสำหรับ snark
zzzzBov

8
@clenemt ดังนั้นคุณคิดว่าa < b && a > cเป็น HTML?
zzzzBov

1
@zzzzBov คุณรู้ว่าคุณคิดว่าa<b && a>cเป็น HTML ... ฉันหวังว่าการตรวจจับ HTML จะง่ายขึ้นมาก การแยกวิเคราะห์ไม่ใช่เรื่องง่าย
oriadam

2
@oriadam บริบทสำหรับการตรวจจับองค์ประกอบในกรณีนั้น หากคุณใช้a < b && a > cเบราว์เซอร์จะเปลี่ยน>และ<อักขระ&gt;และ&lt;เอนทิตีอย่างเหมาะสม หาก แต่คุณใช้a<b && a>cเบราว์เซอร์จะแปลมาร์กอัปว่าเป็นa<b && a>c</b>เพราะการไม่มีช่องว่างหมายความว่าจะ<bเปิด<b>องค์ประกอบ นี่คือการสาธิตอย่างรวดเร็วของสิ่งที่ผมพูดถึง
zzzzBov

5
นี่อาจเป็นคำตอบของโทรลล์ที่ได้รับการโหวตสูงสุดที่ฉันเคยเห็น ;)
aandis

75

วิธีที่ # 1 . นี่คือฟังก์ชันง่ายๆในการทดสอบว่าสตริงมีข้อมูล HTML หรือไม่:

function isHTML(str) {
  var a = document.createElement('div');
  a.innerHTML = str;

  for (var c = a.childNodes, i = c.length; i--; ) {
    if (c[i].nodeType == 1) return true; 
  }

  return false;
}

แนวคิดคือการอนุญาตให้ตัวแยกวิเคราะห์ DOM ของเบราว์เซอร์ตัดสินใจว่าสตริงที่ให้มานั้นดูเหมือน HTML หรือไม่ อย่างที่คุณเห็นเพียงแค่ตรวจสอบELEMENT_NODE( nodeTypeจาก 1)

ฉันทำการทดสอบสองสามครั้งและดูเหมือนว่าจะได้ผล:

isHTML('<a>this is a string</a>') // true
isHTML('this is a string')        // false
isHTML('this is a <b>string</b>') // true

โซลูชันนี้จะตรวจจับสตริง HTML อย่างถูกต้องอย่างไรก็ตามมีผลข้างเคียงที่ img / vide / etc แท็กจะเริ่มดาวน์โหลดทรัพยากรเมื่อแยกวิเคราะห์ใน innerHTML

วิธี # 2 . อีกวิธีหนึ่งใช้DOMParserและไม่มีผลข้างเคียงในการโหลดทรัพยากร:

function isHTML(str) {
  var doc = new DOMParser().parseFromString(str, "text/html");
  return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);
}

หมายเหตุ:
1. Array.fromเป็นวิธี ES2015 สามารถแทนที่ด้วย[].slice.call(doc.body.childNodes).
2. ฟังก์ชั่นลูกศรในการsomeโทรสามารถถูกแทนที่ด้วยฟังก์ชันไม่ระบุตัวตนตามปกติ


3
นี่เป็นความคิดที่ยอดเยี่ยม อย่างไรก็ตามฟังก์ชันนี้ไม่สามารถตรวจพบแท็กปิด (เช่นisHTML("</a>") --> false)
Lewis

9
วิธีแก้ปัญหาที่ยอดเยี่ยม! .. ผลกระทบด้านลบเพียงอย่างเดียวคือหาก html ของคุณมีทรัพยากรแบบคงที่เช่นแอตทริบิวต์ src ของรูปภาพ .. innerHTMLจะบังคับให้เบราว์เซอร์เริ่มดึงทรัพยากรเหล่านั้น :(
Jose Browne

@JoseBrowne แม้ว่าจะไม่ได้ต่อท้าย DOM?
kuus

1
@kuus ใช่แม้ว่าจะไม่ต่อท้าย ใช้โซลูชัน DOMParser
dfsq

1
ความคิดที่ดี แต่คำตอบที่ยอมรับจะไม่ดีกว่าสำหรับประสิทธิภาพหรือไม่? โดยเฉพาะอย่างยิ่งถ้าคุณมีสตริงขนาดใหญ่ (ตั้งใจเล่นสำนวน) หรือถ้าคุณต้องใช้การทดสอบนี้มาก
DerpyNerd

13

การตรวจสอบความถูกต้องเล็กน้อยด้วย:

/<(?=.*? .*?\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\/\1>/i.test(htmlStringHere) 

สิ่งนี้ค้นหาแท็กว่าง (ที่กำหนดไว้ล่วงหน้าบางแท็ก) และ/ยกเลิกแท็กว่าง XHTML และตรวจสอบความถูกต้องเป็น HTML เนื่องจากแท็กว่างหรือจะจับชื่อแท็กและพยายามค้นหาแท็กปิดที่ใดที่หนึ่งในสตริงเพื่อตรวจสอบความถูกต้องเป็น HTML

อธิบายการสาธิต: http://regex101.com/r/cX0eP2

อัปเดต:

ตรวจสอบความถูกต้องด้วย:

/<(br|basefont|hr|input|source|frame|param|area|meta|!--|col|link|option|base|img|wbr|!DOCTYPE).*?>|<(a|abbr|acronym|address|applet|article|aside|audio|b|bdi|bdo|big|blockquote|body|button|canvas|caption|center|cite|code|colgroup|command|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frameset|head|header|hgroup|h1|h2|h3|h4|h5|h6|html|i|iframe|ins|kbd|keygen|label|legend|li|map|mark|menu|meter|nav|noframes|noscript|object|ol|optgroup|output|p|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video).*?<\/\2>/i.test(htmlStringHere) 

นี้ไม่เหมาะสมการตรวจสอบเนื่องจากมีทั้งหมดแท็กคนที่ว่างเปล่าก่อนตามด้วยส่วนที่เหลือซึ่งจะต้องมีแท็กปิด

อธิบายการสาธิตที่นี่: http://regex101.com/r/pE1mT5


1
โปรดทราบว่า regex ด้านล่างใช้งานได้ แต่จะไม่ตรวจพบแท็ก html ที่ไม่ปิดเช่น "'<strong> hello world" เนื่องจาก html นี้ใช้งานไม่ได้ดังนั้นจึงควรถือว่าเป็นสตริง แต่เพื่อวัตถุประสงค์ในทางปฏิบัติแอปของคุณอาจต้องการตรวจจับสิ่งเหล่านี้ด้วย
TK123

HTML ได้รับการออกแบบโดยคำนึงถึงการให้อภัยของตัวแทนผู้ใช้ แท็ก "ไม่ถูกต้อง" ไม่ถูกต้องเป็นเพียงแท็กที่ไม่รู้จักและได้รับอนุญาต แอตทริบิวต์ "ไม่ถูกต้อง" ไม่ถูกต้อง ... นี่เป็นสิ่งที่น่าสังเกตอย่างยิ่งเมื่อมีการเริ่มต้นเกี่ยวข้องกับ "ส่วนประกอบของเว็บ" และเทคโนโลยีเช่น JSX ซึ่งผสม HTML และคำอธิบายส่วนประกอบที่สมบูรณ์ยิ่งขึ้นโดยทั่วไปจะสร้าง DOM เงา ตบสิ่งนี้ในไฟล์และประเมินdocument.querySelector('strange')- มันจะได้ผล
amcgregor

(เพื่อสรุป: เนื่องจากวิธีการเขียนข้อกำหนดการพยายาม "ตรวจสอบความถูกต้อง" มาร์กอัป HTML จึงเป็นธุระของคนโง่โดยพื้นฐานแล้วลิงก์ที่ให้ไปยังเอกสาร HTML ตัวอย่างที่มีองค์ประกอบ "ไม่ถูกต้อง" มีรูปแบบสมบูรณ์ 100% เอกสาร HTML ฉบับสมบูรณ์ - และตั้งแต่ปี 1997 เป็นต้นมา)
amcgregor

10

คำตอบของ zzzzBovข้างต้นนั้นดี แต่ไม่ได้คำนึงถึงแท็กปิดที่หลงทางเช่นตัวอย่างเช่น:

/<[a-z][\s\S]*>/i.test('foo </b> bar'); // false

เวอร์ชันที่จับแท็กปิดได้เช่นกัน:

/<[a-z/][\s\S]*>/i.test('foo </b> bar'); // true

อาจเป็นการดีกว่าที่จะแนะนำการแก้ไขแทนที่จะโพสต์สิ่งนี้เป็นความคิดเห็น
Zlatin Zlatev

ฉันคิดว่าคุณหมายถึง<[a-z/][\s\S]*>- สังเกตเครื่องหมายทับในกลุ่มแรก
Ryan Guill

7

นี่คือซับในที่เลอะเทอะที่ฉันใช้เป็นครั้งคราว:

var isHTML = RegExp.prototype.test.bind(/(<([^>]+)>)/i);

พื้นมันจะกลับมาtrueสำหรับสตริงที่มี<โดยตามตามANYTHING>

โดยพื้นฐานANYTHINGแล้วฉันหมายถึงอะไรก็ได้ยกเว้นสตริงว่างเปล่า

มันไม่ดี แต่เป็นซับเดียว

การใช้งาน

isHTML('Testing');               // false
isHTML('<p>Testing</p>');        // true
isHTML('<img src="hello.jpg">'); // true
isHTML('My < weird > string');   // true (caution!!!)
isHTML('<>');                    // false

อย่างที่คุณเห็นว่ามันยังห่างไกลจากความสมบูรณ์แบบ แต่อาจทำงานให้คุณได้ในบางกรณี


1
สิ่งที่ฉันต้องการ ไม่มีอะไรหรูหราแค่สะอาด ขอบคุณ!
moeiscool

6

ทุกคำตอบที่นี่มีมากกว่ารวมพวกเขาเพียงแค่มองหาตามมาด้วย< >ไม่มีวิธีที่สมบูรณ์แบบในการตรวจสอบว่าสตริงเป็น HTML หรือไม่ แต่คุณทำได้ดีกว่านี้

ด้านล่างเรามองหาแท็กปิดท้ายและจะเข้มงวดและแม่นยำมากขึ้น:

import re
re_is_html = re.compile(r"(?:</[^<]+>)|(?:<[^<]+/>)")

และนี่คือการดำเนินการ:

# Correctly identified as not HTML:
print re_is_html.search("Hello, World")
print re_is_html.search("This is less than <, this is greater than >.")
print re_is_html.search(" a < 3 && b > 3")
print re_is_html.search("<<Important Text>>")
print re_is_html.search("<a>")

# Correctly identified as HTML
print re_is_html.search("<a>Foo</a>")
print re_is_html.search("<input type='submit' value='Ok' />")
print re_is_html.search("<br/>")

# We don't handle, but could with more tweaking:
print re_is_html.search("<br>")
print re_is_html.search("Foo &amp; bar")
print re_is_html.search("<input type='submit' value='Ok'>")

4

หากคุณกำลังสร้าง regex จากสตริงลิเทอรัลคุณต้องหลีกเลี่ยงแบ็กสแลช:

var htmlRegex = new RegExp("<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>(.*?)</\\1>");
// extra backslash added here ---------------------^ and here -----^

สิ่งนี้ไม่จำเป็นหากคุณใช้ตัวอักษร regex แต่คุณต้องหลีกเลี่ยงเครื่องหมายทับ:

var htmlRegex = /<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)<\/\1>/;
// forward slash escaped here ------------------------^

นอกจากนี้ jsfiddle ของคุณไม่ทำงานเนื่องจากคุณกำหนดonloadตัวจัดการภายในตัวจัดการอื่นonloadค่าเริ่มต้นตามที่ตั้งไว้ในพาเนล Frameworks & Extensions ทางด้านซ้ายคือการรวม JS ในonloadไฟล์. เปลี่ยนเป็นตัวเลือก nowrap และแก้ไขการหลีกเลี่ยงสตริงตามตัวอักษรและ "ใช้งานได้" (ภายในข้อ จำกัด ที่ทุกคนระบุไว้ในความคิดเห็น): http://jsfiddle.net/wFWtc/4/

เท่าที่ฉันรู้ว่านิพจน์ทั่วไปของ JavaScript ไม่มีการอ้างอิงกลับ ดังนั้นส่วนนี้ของการแสดงออกของคุณ:

</\1>

จะไม่ทำงานใน JS (แต่จะใช้งานได้ในภาษาอื่น ๆ )



นี่จะเป็นการทดสอบว่าหนึ่งในแท็กนั้นใช้ได้ แต่ไม่มีอะไรเกี่ยวกับส่วนที่เหลือ ไม่แน่ใจว่า OP ต้องการ "ความถูกต้อง" แบบไหน
nhahtdh

1
แล้ว<br> <hr> <input...>@ user1240679 ล่ะ?
CSᵠ


3

ด้วย jQuery:

function isHTML(str) {
  return /^<.*?>$/.test(str) && !!$(str)[0];
}

2
isHTML("<foo>");// คืนค่าจริงisHTML("div");// คืนค่าจริงหากมีอยู่divบนหน้า
ACK_stoverflow

@yekta - เอาไปเกี่ยวอะไร? ควรตรวจสอบว่าสตริงเป็น html หรือไม่ อีเมลไม่ใช่แท็ก html เท่าที่ฉันรู้ ... isHTML ('foo@bar.com ') -> เท็จ // ถูกต้อง
gtournie

1
สตริงอาจเป็นอะไรก็ได้ถ้าคุณรู้จักแท็ก HTML แล้วทำไมต้องตรวจสอบว่า HTML ของมันตั้งแต่แรกฉันไม่ค่อยทำตามประเด็นของคุณ @ไม่ได้เป็นไวยากรณ์ที่ถูกต้องสำหรับผู้เลือก ดังนั้นเมื่อคุณส่งมันไปยังตัวเลือก jQuery มันจะทำให้เกิดข้อยกเว้น (เช่น$("you@example.com")จาก!!$(str)[0]) ฉันหมายถึง!!$(str)[0] ส่วนนี้โดยเฉพาะ คุณเพิ่งแก้ไขคำตอบของคุณ แต่ตอนนี้คุณกำลังตรวจสอบ HTML ก่อนที่ jQuery จะทำอะไร
yekta

ฉันไม่คิดว่าผู้เขียนต้องการตรวจสอบว่าเป็นเพียงสตริง นั่นคือประเด็น สิ่งที่เขาต้องการคือฟังก์ชั่นที่สามารถตรวจสอบได้ว่าสตริงนั้นเป็นแท็ก HTML ที่ถูกต้องหรือไม่ไม่ใช่แค่ HTML (มิฉะนั้นมันก็ค่อนข้างโง่) ฉันอัปเดตคำตอบหลังจากอ่านความคิดเห็น @ACK_stoverflow แล้ว แต่ฉันแน่ใจว่า regex ธรรมดาควรทำ
gtournie

3

การใช้ jQuery ในกรณีนี้รูปแบบที่ง่ายที่สุดคือ:

if ($(testString).length > 0)

ถ้าหมายถึงนี้ว่ามีความเป็นหนึ่งในแท็ก$(testString).length = 1 HTMLtextStging


ตามคำตอบด้านล่าง (เริ่มต้นด้วย "With jQuery" ซึ่งเขียนไว้สี่ปีก่อนหน้านี้!) ให้พิจารณาตัวเลือกการใช้งานที่หลากหลายจากจุดเริ่มต้นเพียงจุดเดียว $()เป็นการดำเนินการเลือก CSS แต่ยังเป็นโรงงานโหนด DOM จากการทำให้เป็นอนุกรม HTML แบบข้อความ แต่ ... ตามคำตอบอื่น ๆ ที่ต้องทนทุกข์ทรมานจากการพึ่งพา jQuery เดียวกัน "div" ไม่ใช่ HTML แต่จะกลับมาtrueหากมี<div>องค์ประกอบใด ๆอยู่ในหน้า นี่เป็นแนวทางที่แย่มากอย่างที่ฉันคาดหวังไว้กับเกือบทุกวิธีที่เกี่ยวข้องกับ jQuery โดยไม่จำเป็น (ให้ตายเถอะ)
amcgregor

2

มีโซลูชันที่น่าสนใจที่เกี่ยวข้องกับการใช้เบราว์เซอร์เพื่อพยายามแยกวิเคราะห์ข้อความโดยระบุว่ามีการสร้างโหนด DOM หรือไม่ซึ่งจะ ... ช้า หรือนิพจน์ทั่วไปซึ่งจะเร็วกว่า แต่ ... อาจไม่ถูกต้อง นอกจากนี้ยังมีคำถามสองข้อที่แตกต่างกันมากที่เกิดจากปัญหานี้:

Q1: สตริงมีเศษ HTML หรือไม่

เป็นสตริง ส่วนของเอกสาร HTML ที่มีมาร์กอัปองค์ประกอบ HTML หรือเอนทิตีที่เข้ารหัสหรือไม่ สิ่งนี้สามารถใช้เป็นตัวบ่งชี้ว่าสตริงอาจต้องการการฟอกสี / การฆ่าเชื้อหรือการถอดรหัสเอนทิตี:

/</?[a-z][^>]*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);/

คุณสามารถเห็นรูปแบบนี้ที่ใช้กับตัวอย่างทั้งหมดจากคำตอบที่มีอยู่ทั้งหมดในขณะที่เขียนนี้รวมถึงบางส่วน ... ข้อความตัวอย่างที่สร้างขึ้นด้วย WYSIWYG หรือ Word ที่ค่อนข้างน่ากลัวและการอ้างอิงเอนทิตีอักขระต่างๆ

Q2: สตริงเป็นเอกสาร HTML หรือไม่

ข้อกำหนด HTML จะเขย่าขวัญหลวมเป็นสิ่งที่จะมีการพิจารณาเอกสาร เบราว์เซอร์ใช้ความยาวมากในการแยกวิเคราะห์ข้อความขยะเกือบทั้งหมดเป็น HTML สองแนวทาง: พิจารณาทุกอย่างของ HTML (เนื่องจากหากส่งด้วยtext/htmlContent-Type จะต้องใช้ความพยายามอย่างมากในการพยายามตีความเป็น HTML โดยตัวแทนผู้ใช้) หรือมองหาเครื่องหมายนำหน้า:

<!DOCTYPE html>

ในแง่ของ "รูปร่างที่ดี" นั้นและแทบจะไม่มีอะไรอื่นที่ "จำเป็น" ต่อไปนี้เป็นเอกสาร HTML ที่สมบูรณ์และถูกต้อง 100% ซึ่งมีองค์ประกอบ HTML ทั้งหมดที่คุณคิดว่าถูกละไว้:

<!DOCTYPE html>
<title>Yes, really.</title>
<p>This is everything you need.

ได้. มีกฎระเบียบที่ชัดเจนเกี่ยวกับวิธีการรูปแบบ "หายไป" องค์ประกอบเช่น<html>, และ<head> <body>แม้ว่าฉันคิดว่ามันค่อนข้างน่าขบขันที่การเน้นไวยากรณ์ของ SO ล้มเหลวในการตรวจจับสิ่งนั้นอย่างถูกต้องโดยไม่มีคำใบ้ที่ชัดเจน


0

ทางออกของฉันคือ

const element = document.querySelector('.test_element');

const setHtml = elem =>{
    let getElemContent = elem.innerHTML;

    // Clean Up whitespace in the element
    // If you don't want to remove whitespace, then you can skip this line
    let newHtml = getElemContent.replace(/[\n\t ]+/g, " ");

    //RegEX to check HTML
    let checkHtml = /<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)<\/\1>/.test(getElemContent);

    //Check it is html or not
    if (checkHtml){
        console.log('This is an HTML');
        console.log(newHtml.trim());
    }
    else{
        console.log('This is a TEXT');
        console.log(elem.innerText.trim());
    }
}

setHtml(element);

การแสดงออกปกติของคุณดูเหมือนมีข้อบกพร่องอย่างมากเมื่อเทียบกับนิพจน์ที่ครอบคลุมมากกว่าและต้องมีการประมวลผลล่วงหน้า (การแทนที่ครั้งแรก) ถือเป็นเรื่องที่น่าเสียดายอย่างยิ่ง
amcgregor

-1

มีแพ็คเกจ NPM คือ-html ที่สามารถพยายามแก้ปัญหานี้https://github.com/sindresorhus/is-html


ฉันไม่เข้าใจนิพจน์ที่พยายามใช้ซึ่งล้มเหลวยกเว้นในประเภทหลักที่ประกาศไว้และรูปแบบ "เต็ม" ที่สร้างจากองค์ประกอบ HTML ที่รู้จักซึ่งดึงเข้ามาจากการอ้างอิงเพิ่มเติมจะเพิกเฉยต่อข้อเท็จจริงที่ว่านั่นไม่ใช่วิธีการทำงานของ HTML และไม่ เป็นเวลานานมาก นอกจากนี้รูปแบบฐานบอกอย่างชัดเจน<html>และ<body>แท็กซึ่งทั้งสองเป็นตัวเลือกทั้งหมด การทดสอบ "not match XML" กำลังบอก
amcgregor

@amcgregor ถ้าคุณคิดว่าโซลูชันของคุณดีกว่าอาจมีส่วนช่วยให้ isHTML repo? และเพิ่มชุดการทดสอบของคุณจาก regex101? มันจะมีคุณค่าต่อชุมชน
Colin D

จุดประสงค์พื้นฐานของไลบรารีนั้นถูกเข้าใจผิดและโดยเนื้อแท้แล้วจะผิดพลาดในหลาย ๆ กรณีโดยปกติแล้วการตั้งค่าสถานะผิดพลาดว่าไม่ใช่ HTML เนื่องจากมีแท็กที่ไม่เข้าใจ การตรวจสอบไม่สามารถทำได้ด้วยวิธีนี้ นอกจากนี้ regex ธรรมดาหรือ a (แก้ไข: คู่ของ ) librar [ies] … เราอาจลืมวิธีการเขียนโปรแกรมไปและ Node / NPM ไม่ใช่ภาษาหรือ toolchain ที่ฉันต้องการใช้โดยทั่วไปมีส่วนร่วมหรือสนับสนุนให้ใช้ .
amcgregor

เอาล่ะ amcgergor คุณค่อนข้างมองฉันในแง่ลบเมื่อฉันแค่พยายามช่วย ฉันไม่เห็นด้วยกับการที่ npm ถูกเข้าใจผิด ลองนึกภาพคำตอบของสแต็กล้นออกมาพร้อมกับการปรับแต่งเล็กน้อยในอนาคต ฉันในฐานะนักพัฒนาที่ใช้ไลบรารีของคุณเพียงแค่อัปเกรดและฉันจะได้รับพฤติกรรมที่เหมาะสมมากขึ้น แต่ฉันต้อง .... อยู่กับพฤติกรรมที่ไม่ดีหรือทบทวนคำตอบของสแต็กล้นนี้เพื่อรับการแก้ไขของคุณ? นั่นคือจักรวาลทางเลือก
Colin D

แง่ลบ? ฉันกำลังอธิบายท่าทางของฉันและทำไมฉันถึงไม่ทำในสิ่งที่ดูเหมือนเป็นเรื่องที่สมเหตุสมผล อย่างไรก็ตามโปรดทราบว่าบทความที่ฉันเชื่อมโยงเป็นสิ่งที่ตามมาจากการอักเสบก่อนเล็กน้อย (เชื่อมโยงไปข้างหน้า) ซึ่งสร้างการอภิปรายมากมาย เขาตีพิมพ์เอกสารทางเทคนิคซึ่งเชื่อมโยงไปที่ด้านล่างด้วย ฉันตอบโต้ความรู้สึกของคุณเกี่ยวกับการทำงานซ้ำโดยมีหลักฐานเกี่ยวกับคุณภาพ อ้าง: §7.2 (& ภัยพิบัติแผ่นซ้าย & eslint)
amcgregor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.