การทดสอบคุณลักษณะของการคอมไพล์ regex ใน IE11
ฉันต้องการทดสอบ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
ใช้งานได้ใน 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
หากคุณรู้สึกสบายใจกับสิ่งที่ชอบFunction
หรือeval
และtry/catch
... สิ่งนี้ควรได้ผล:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
โปรดทราบว่าคุณต้องหลีกเลี่ยง\\p
เนื่องจากมีอยู่ในสตริงแล้ว ทดสอบสิ่งนี้บน IE11 และใช้งานได้ (ถอยกลับโดยไม่มีข้อผิดพลาดในการแยกวิเคราะห์ร้ายแรง)