การทดสอบคุณลักษณะของการคอมไพล์ regex ใน IE11

Jan 05 2021

ฉันต้องการทดสอบUnicode Regex Property Escapesเพื่อหลีกเลี่ยงการรวบรวมนิพจน์ทั่วไปที่ใช้งานไม่ได้ในเบราว์เซอร์ที่ไม่รองรับ (เช่น IE11) ตามหลักการแล้วฉันต้องการเขียนบางสิ่งตามบรรทัด:

if (regex supports unicode property escapes) {
    return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
    return /somereplacementregex/;
}

เป็นไปได้หรือไม่ ฉันรู้ว่ามี API การตรวจจับคุณลักษณะบางอย่าง แต่เท่าที่ฉันรู้ว่าไม่มีสำหรับ regex หรือหากมีวิธีอื่นในการเขียนสิ่งนี้ที่จะไม่ทำลายการคอมไพล์และจะทำให้เกิดข้อผิดพลาดที่ฉันสามารถจับได้ก็จะดี

คำตอบ

1 Expressionist Jan 05 2021 at 04:07

ใช้งานได้ใน Firefox หรือ Safari ควรจะโอเคใน IE11:

let regex = /somereplacementregex/;
try
{
    regex = new RegExp ("\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F", "gu");
}
catch (e) { }
//
// use regex...
console.log (regex);
1 David784 Jan 05 2021 at 01:13

หากคุณรู้สึกสบายใจกับสิ่งที่ชอบFunctionหรือevalและtry/catch... สิ่งนี้ควรได้ผล:

try { 
  return new Function('', 'return /\\p{Script=Greek}/u;')() 
} catch(e) { return /asdf/g;}

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