unicode-property-names-valid.js (4456B)
1 // Copyright (C) 2020 Apple Inc. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 author: Michael Saboff 5 description: Exotic named group names in Unicode RegExps 6 esid: prod-GroupSpecifier 7 features: [regexp-named-groups] 8 ---*/ 9 10 /* 11 Valid ID_Start / ID_Continue Unicode characters 12 13 π \u{1d453} \ud835 \udc53 14 π \u{1d45c} \ud835 \udc5c 15 π₯ \u{id465} \ud835 \udc65 16 17 π \u{1d4d3} \ud835 \udcd3 18 πΈ \u{1d4f8} \ud835 \udcf8 19 π° \u{1d4f0} \ud835 \udcf0 20 21 π \u{1d4d1} \ud835 \udcd1 22 π» \u{1d4fb} \ud835 \udcfb 23 πΈ \u{1d4f8} \ud835 \udcf8 24 π \u{1d500} \ud835 \udd00 25 π· \u{1d4f7} \ud835 \udcf7 26 27 π° \u{1d5b0} \ud835 \uddb0 28 π‘ \u{1d5a1} \ud835 \udda1 29 π₯ \u{1d5a5} \ud835 \udda5 30 31 (fox) ηΈ \u{72f8} \u72f8 32 (dog) η \u{72d7} \u72d7 33 34 Valid ID_Continue Unicode characters (Can't be first identifier character.) 35 36 π \u{1d7da} \ud835 \udfda 37 38 Invalid ID_Start / ID_Continue 39 40 (fox face emoji) π¦ \u{1f98a} \ud83e \udd8a 41 (dog emoji) π \u{1f415} \ud83d \udc15 42 */ 43 44 var string = "The quick brown fox jumped over the lazy dog's back"; 45 var string2 = "It is a dog eat dog world."; 46 47 let match = null; 48 49 assert.sameValue(string.match(/(?<animal>fox|dog)/u).groups.animal, "fox"); 50 assert.sameValue(string.match(/(?<the2>the)/u).groups.the2, "the"); 51 52 match = string.match(/(?<πππ₯>fox).*(?<ππΈπ°>dog)/u); 53 assert.sameValue(match.groups.πππ₯, "fox"); 54 assert.sameValue(match.groups.ππΈπ°, "dog"); 55 assert.sameValue(match[1], "fox"); 56 assert.sameValue(match[2], "dog"); 57 58 match = string.match(/(?<ηΈ>fox).*(?<η>dog)/u); 59 assert.sameValue(match.groups.ηΈ, "fox"); 60 assert.sameValue(match.groups.η, "dog"); 61 assert.sameValue(match[1], "fox"); 62 assert.sameValue(match[2], "dog"); 63 64 assert.sameValue(string.match(/(?<ππ»πΈππ·>brown)/u).groups.ππ»πΈππ·, "brown"); 65 assert.sameValue(string.match(/(?<ππ»πΈππ·>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown"); 66 assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/u).groups.ππ»πΈππ·, "brown"); 67 assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown"); 68 assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/u).groups.ππ»πΈππ·, "brown"); 69 assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown"); 70 71 assert.sameValue(string.match(/(?<π°π‘π₯>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 72 assert.sameValue(string.match(/(?<π°π‘\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 73 assert.sameValue(string.match(/(?<π°\u{1d5a1}π₯>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 74 assert.sameValue(string.match(/(?<π°\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 75 assert.sameValue(string.match(/(?<\u{1d5b0}π‘π₯>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 76 assert.sameValue(string.match(/(?<\u{1d5b0}π‘\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 77 assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}π₯>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 78 assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.π°π‘π₯, "quick brown fox"); 79 80 assert.sameValue(string.match(/(?<theπ>the)/u).groups.theπ, "the"); 81 assert.sameValue(string.match(/(?<the\u{1d7da}>the)/u).groups.theπ, "the"); 82 assert.sameValue(string.match(/(?<the\ud835\udfda>the)/u).groups.theπ, "the"); 83 84 match = string2.match(/(?<dog>dog)(.*?)(\k<dog>)/u); 85 assert.sameValue(match.groups.dog, "dog"); 86 assert.sameValue(match[1], "dog"); 87 assert.sameValue(match[2], " eat "); 88 assert.sameValue(match[3], "dog"); 89 90 match = string2.match(/(?<ππΈπ°>dog)(.*?)(\k<ππΈπ°>)/u); 91 assert.sameValue(match.groups.ππΈπ°, "dog"); 92 assert.sameValue(match[1], "dog"); 93 assert.sameValue(match[2], " eat "); 94 assert.sameValue(match[3], "dog"); 95 96 match = string2.match(/(?<η>dog)(.*?)(\k<η>)/u); 97 assert.sameValue(match.groups.η, "dog"); 98 assert.sameValue(match[1], "dog"); 99 assert.sameValue(match[2], " eat "); 100 assert.sameValue(match[3], "dog"); 101 102 reportCompare(0, 0);