मुझे जावास्क्रिप्ट में नियमित अभिव्यक्ति के संबंध में कुछ मदद चाहिए।

मैं किसी भी स्ट्रिंग से मिलान करने की कोशिश कर रहा हूं जिसमें या तो केवल मूल लैटिन (ASCII) वर्ण या केवल ग्रीक यूनिकोड वर्ण हों। इन दो सेटों से मिश्रित वर्णों वाले स्ट्रिंग्स की अनुमति नहीं है।

मेरे पास यह नियमित अभिव्यक्ति है जो सटीक विपरीत से मेल खाती है (सभी तार जिनमें कम से कम एक ग्रीक और एक लैटिन वर्ण होता है), लेकिन इसे अस्वीकार करने का कोई तरीका नहीं मिल रहा है:

https://regex101.com/r/JHzmhc/1

अग्रिम में धन्यवाद।

4
ktsangop 22 जून 2017, 16:55

2 जवाब

सबसे बढ़िया उत्तर

आप इस्तेमाल कर सकते हैं

^(?:[\u0000-\u007F]+|[\u0370-\u03FF]+)$

रेगेक्स डेमो देखें

विवरण:

  • ^ - स्ट्रिंग की शुरुआत
  • (?: - एक गैर-कैप्चरिंग समूह की शुरुआत (ताकि एंकर को दोनों विकल्पों पर लागू किया जा सके): <उल>
  • [\u0000-\u007F]+ - 1+ ASCII वर्ण
  • | - या
  • [\u0370-\u03FF]+ - 1+ ग्रीक वर्ण
  • ) - समूह का अंत
  • $ - स्ट्रिंग का अंत।
  • 3
    Wiktor Stribiżew 22 जून 2017, 17:06

    Wiktor's Solution का सामान्य प्रारूप सही है। दुर्भाग्य से, ग्रीक प्रतीकों का मिलान [\u0370-\u03FF] जितना आसान नहीं है - इस तरह आप कई ग्रीक प्रतीकों से चूक जाते हैं।

    यूनिकोड प्रॉपर्टी रेगुलर एक्सप्रेशन में बच जाती है के साथ, आप यह करेंगे:

    /^(?:[\0-\x7F\p]+|\p{Script_Extensions=Greek}+)$/u
    

    जब तक यूनिकोड प्रॉपर्टी एस्केप आधिकारिक रूप से ईसीएमएस्क्रिप्ट में समर्थित और हर जगह लागू नहीं हो जाती, तब तक हम ट्रांसपाइल इसे करने के लिए:

    /^(?:[\0-\x7F]+|(?:[\u0342\u0345\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF-\u1DC1\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65]|\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45])+)$/
    

    यह रहा डेमो: https://regex101.com/r/cmNTLA/1

    2
    Mathias Bynens 23 जून 2017, 11:36