1(function (f) { 2 if (typeof exports === "object" && typeof module !== "undefined") { 3 module.exports = f() 4 } else if (typeof define === "function" && define.amd) { 5 define([], f) 6 } else { 7 var g; 8 if (typeof window !== "undefined") { 9 g = window 10 } else if (typeof global !== "undefined") { 11 g = global 12 } else if (typeof self !== "undefined") { 13 g = self 14 } else { 15 g = this 16 } 17 g.XRegExp = f() 18 } 19})(function () { 20 var define, module, exports; 21 return (function e(t, n, r) { 22 function s(o, u) { 23 if (!n[o]) { 24 if (!t[o]) { 25 var a = typeof require == "function" && require; 26 if (!u && a) 27 return a(o, !0); 28 if (i) 29 return i(o, !0); 30 var f = new Error("Cannot find module '" + o + "'"); 31 throw f.code = "MODULE_NOT_FOUND", f 32 } 33 var l = n[o] = {exports: {}}; 34 t[o][0].call(l.exports, function (e) { 35 var n = t[o][1][e]; 36 return s(n ? n : e) 37 }, l, l.exports, e, t, n, r) 38 } 39 return n[o].exports 40 } 41 var i = typeof require == "function" && require; 42 for (var o = 0; o < r.length; o++) 43 s(r[o]); 44 return s 45 })({1: [function (require, module, exports) { 46 /*! 47 * XRegExp.build 3.2.0 48 * <xregexp.com> 49 * Steven Levithan (c) 2012-2017 MIT License 50 * Inspired by Lea Verou's RegExp.create <lea.verou.me> 51 */ 52 53 module.exports = function (XRegExp) { 54 'use strict'; 55 56 var REGEX_DATA = 'xregexp'; 57 var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; 58 var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g', { 59 conjunction: 'or' 60 }); 61 62 /** 63 * Strips a leading `^` and trailing unescaped `$`, if both are present. 64 * 65 * @private 66 * @param {String} pattern Pattern to process. 67 * @returns {String} Pattern with edge anchors removed. 68 */ 69 function deanchor(pattern) { 70 // Allow any number of empty noncapturing groups before/after anchors, because regexes 71 // built/generated by XRegExp sometimes include them 72 var leadingAnchor = /^(?:\(\?:\))*\^/; 73 var trailingAnchor = /\$(?:\(\?:\))*$/; 74 75 if ( 76 leadingAnchor.test(pattern) && 77 trailingAnchor.test(pattern) && 78 // Ensure that the trailing `$` isn't escaped 79 trailingAnchor.test(pattern.replace(/\\[\s\S]/g, '')) 80 ) { 81 return pattern.replace(leadingAnchor, '').replace(trailingAnchor, ''); 82 } 83 84 return pattern; 85 } 86 87 /** 88 * Converts the provided value to an XRegExp. Native RegExp flags are not preserved. 89 * 90 * @private 91 * @param {String|RegExp} value Value to convert. 92 * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not 93 * already a regex generated by XRegExp 94 * @returns {RegExp} XRegExp object with XRegExp syntax applied. 95 */ 96 function asXRegExp(value, addFlagX) { 97 var flags = addFlagX ? 'x' : ''; 98 return XRegExp.isRegExp(value) ? 99 (value[REGEX_DATA] && value[REGEX_DATA].captureNames ? 100 // Don't recompile, to preserve capture names 101 value : 102 // Recompile as XRegExp 103 XRegExp(value.source, flags) 104 ) : 105 // Compile string as XRegExp 106 XRegExp(value, flags); 107 } 108 109 /** 110 * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in 111 * the outer pattern and provided subpatterns are automatically renumbered to work correctly. 112 * Native flags used by provided subpatterns are ignored in favor of the `flags` argument. 113 * 114 * @memberOf XRegExp 115 * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows 116 * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within 117 * character classes. 118 * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A 119 * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present. 120 * @param {String} [flags] Any combination of XRegExp flags. 121 * @returns {RegExp} Regex with interpolated subpatterns. 122 * @example 123 * 124 * var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { 125 * hours: XRegExp.build('{{h12}} : | {{h24}}', { 126 * h12: /1[0-2]|0?[1-9]/, 127 * h24: /2[0-3]|[01][0-9]/ 128 * }, 'x'), 129 * minutes: /^[0-5][0-9]$/ 130 * }); 131 * time.test('10:59'); // -> true 132 * XRegExp.exec('10:59', time).minutes; // -> '59' 133 */ 134 XRegExp.build = function (pattern, subs, flags) { 135 flags = flags || ''; 136 // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how 137 // some browsers convert `RegExp('\n')` to a regex that contains the literal characters `\` 138 // and `n`. See more details at <https://github.com/slevithan/xregexp/pull/163>. 139 var addFlagX = flags.indexOf('x') > -1; 140 var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern); 141 // Add flags within a leading mode modifier to the overall pattern's flags 142 if (inlineFlags) { 143 flags = XRegExp._clipDuplicates(flags + inlineFlags[1]); 144 } 145 146 var data = {}; 147 for (var p in subs) { 148 if (subs.hasOwnProperty(p)) { 149 // Passing to XRegExp enables extended syntax and ensures independent validity, 150 // lest an unescaped `(`, `)`, `[`, or trailing `\` breaks the `(?:)` wrapper. For
151 // subpatterns provided as native regexes, it dies on octals and adds the property 152 // used to hold extended regex instance data, for simplicity. 153 var sub = asXRegExp(subs[p], addFlagX); 154 data[p] = { 155 // Deanchoring allows embedding independently useful anchored regexes. If you 156 // really need to keep your anchors, double them (i.e., `^^...$$`). 157 pattern: deanchor(sub.source), 158 names: sub[REGEX_DATA].captureNames || [] 159 }; 160 } 161 } 162 163 // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid; 164 // helps keep this simple. Named captures will be put back. 165 var patternAsRegex = asXRegExp(pattern, addFlagX); 166 167 // 'Caps' is short for 'captures' 168 var numCaps = 0; 169 var numPriorCaps; 170 var numOuterCaps = 0; 171 var outerCapsMap = [0]; 172 var outerCapNames = patternAsRegex[REGEX_DATA].captureNames || []; 173 var output = patternAsRegex.source.replace(parts, function ($0, $1, $2, $3, $4) { 174 var subName = $1 || $2; 175 var capName; 176 var intro; 177 var localCapIndex; 178 // Named subpattern 179 if (subName) { 180 if (!data.hasOwnProperty(subName)) { 181 throw new ReferenceError('Undefined property ' + $0); 182 } 183 // Named subpattern was wrapped in a capturing group 184 if ($1) { 185 capName = outerCapNames[numOuterCaps]; 186 outerCapsMap[++numOuterCaps] = ++numCaps; 187 // If it's a named group, preserve the name. Otherwise, use the subpattern name 188 // as the capture name 189 intro = '(?<' + (capName || subName) + '>'; 190 } else { 191 intro = '(?:'; 192 } 193 numPriorCaps = numCaps; 194 return intro + data[subName].pattern.replace(subParts, function (match, paren, backref) { 195 // Capturing group 196 if (paren) { 197 capName = data[subName].names[numCaps - numPriorCaps]; 198 ++numCaps; 199 // If the current capture has a name, preserve the name 200 if (capName) { 201 return '(?<' + capName + '>'; 202 } 203 // Backreference 204 } else if (backref) { 205 localCapIndex = +backref - 1; 206 // Rewrite the backreference 207 return data[subName].names[localCapIndex] ? 208 // Need to preserve the backreference name in case using flag `n` 209 '\\k<' + data[subName].names[localCapIndex] + '>' : 210 '\\' + (+backref + numPriorCaps); 211 } 212 return match; 213 }) + ')'; 214 } 215 // Capturing group 216 if ($3) { 217 capName = outerCapNames[numOuterCaps]; 218 outerCapsMap[++numOuterCaps] = ++numCaps; 219 // If the current capture has a name, preserve the name 220 if (capName) { 221 return '(?<' + capName + '>'; 222 } 223 // Backreference 224 } else if ($4) { 225 localCapIndex = +$4 - 1; 226 // Rewrite the backreference 227 return outerCapNames[localCapIndex] ? 228 // Need to preserve the backreference name in case using flag `n` 229 '\\k<' + outerCapNames[localCapIndex] + '>' : 230 '\\' + outerCapsMap[+$4]; 231 } 232 return $0; 233 }); 234 235 return XRegExp(output, flags); 236 }; 237 238 }; 239 240 }, {}
240], 2: [function (require, module, exports) { 241 /*! 242 * XRegExp.matchRecursive 3.2.0 243 * <xregexp.com> 244 * Steven Levithan (c) 2009-2017 MIT License 245 */ 246 247 module.exports = function (XRegExp) { 248 'use strict'; 249 250 /** 251 * Returns a match detail object composed of the provided values. 252 * 253 * @private 254 */ 255 function row(name, value, start, end) { 256 return { 257 name: name, 258 value: value, 259 start: start, 260 end: end 261 }; 262 } 263 264 /** 265 * Returns an array of match strings between outermost left and right delimiters, or an array of 266 * objects with detailed match parts and position data. An error is thrown if delimiters are 267 * unbalanced within the data. 268 * 269 * @memberOf XRegExp 270 * @param {String} str String to search. 271 * @param {String} left Left delimiter as an XRegExp pattern. 272 * @param {String} right Right delimiter as an XRegExp pattern. 273 * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters. 274 * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. 275 * @returns {Array} Array of matches, or an empty array. 276 * @example 277 * 278 * // Basic usage 279 * var str = '(t((e))s)t()(ing)'; 280 * XRegExp.matchRecursive(str, '\\(', '\\)', 'g'); 281 * // -> ['t((e))s', '', 'ing'] 282 * 283 * // Extended information mode with valueNames 284 * str = 'Here is <div> <div>an</div></div> example'; 285 * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', { 286 * valueNames: ['between', 'left', 'match', 'right'] 287 * }); 288 * // -> [ 289 * // {name: 'between', value: 'Here is ', start: 0, end: 8}, 290 * // {name: 'left', value: '<div>', start: 8, end: 13}, 291 * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27}, 292 * // {name: 'right', value: '</div>', start: 27, end: 33}, 293 * // {name: 'between', value: ' example', start: 33, end: 41} 294 * // ] 295 * 296 * // Omitting unneeded parts with null valueNames, and using escapeChar 297 * str = '...{1}.\\{{function(x,y){return {y:x}}}'; 298 * XRegExp.matchRecursive(str, '{', '}', 'g', { 299 * valueNames: ['literal', null, 'value', null], 300 * escapeChar: '\\' 301 * }); 302 * // -> [ 303 * // {name: 'literal', value: '...', start: 0, end: 3}, 304 * // {name: 'value', value: '1', start: 4, end: 5}, 305 * // {name: 'literal', value: '.\\{', start: 6, end: 9}, 306 * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37} 307 * // ] 308 * 309 * // Sticky mode via flag y 310 * str = '<1><<<2>>><3>4<5>'; 311 * XRegExp.matchRecursive(str, '<', '>', 'gy'); 312 * // -> ['1', '<<2>>', '3'] 313 */ 314 XRegExp.matchRecursive = function (str, left, right, flags, options) { 315 flags = flags || ''; 316 options = options || {}; 317 var global = flags.indexOf('g') > -1; 318 var sticky = flags.indexOf('y') > -1; 319 // Flag `y` is controlled internally 320 var basicFlags = flags.replace(/y/g, ''); 321 var escapeChar = options.escapeChar; 322 var vN = options.valueNames; 323 var output = []; 324 var openTokens = 0; 325 var delimStart = 0; 326 var delimEnd = 0; 327 var lastOuterEnd = 0; 328 var outerStart; 329 var innerStart; 330 var leftMatch; 331 var rightMatch; 332 var esc; 333 left = XRegExp(left, basicFlags); 334 right = XRegExp(right, basicFlags); 335 336 if (escapeChar) { 337 if (escapeChar.length > 1) { 338 throw new Error('Cannot use more than one escape character'); 339 } 340 escapeChar = XRegExp.escape(escapeChar); 341 // Example of concatenated `esc` regex: 342 // `escapeChar`: '%' 343 // `left`: '<' 344 // `right`: '>'
345 // Regex is: /(?:%[\S\s]|(?:(?!<|>)[^%])+)+/ 346 esc = new RegExp( 347 '(?:' + escapeChar + '[\\S\\s]|(?:(?!' + 348 // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`. 349 // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax 350 // transformation resulting from those flags was already applied to `left` and 351 // `right` when they were passed through the XRegExp constructor above. 352 XRegExp.union([left, right], '', {conjunction: 'or'}).source + 353 ')[^' + escapeChar + '])+)+', 354 // Flags `gy` not needed here 355 flags.replace(/[^imu]+/g, '') 356 ); 357 } 358 359 while (true) { 360 // If using an escape character, advance to the delimiter's next starting position, 361 // skipping any escaped characters in between 362 if (escapeChar) { 363 delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length; 364 } 365 leftMatch = XRegExp.exec(str, left, delimEnd); 366 rightMatch = XRegExp.exec(str, right, delimEnd); 367 // Keep the leftmost match only 368 if (leftMatch && rightMatch) { 369 if (leftMatch.index <= rightMatch.index) { 370 rightMatch = null; 371 } else { 372 leftMatch = null; 373 } 374 } 375 // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens): 376 // LM | RM | OT | Result 377 // 1 | 0 | 1 | loop 378 // 1 | 0 | 0 | loop 379 // 0 | 1 | 1 | loop 380 // 0 | 1 | 0 | throw 381 // 0 | 0 | 1 | throw 382 // 0 | 0 | 0 | break 383 // The paths above don't include the sticky mode special case. The loop ends after the 384 // first completed match if not `global`. 385 if (leftMatch || rightMatch) { 386 delimStart = (leftMatch || rightMatch).index; 387 delimEnd = delimStart + (leftMatch || rightMatch)[0].length; 388 } else if (!openTokens) { 389 break; 390 } 391 if (sticky && !openTokens && delimStart > lastOuterEnd) { 392 break; 393 } 394 if (leftMatch) { 395 if (!openTokens) { 396 outerStart = delimStart; 397 innerStart = delimEnd; 398 } 399 ++openTokens; 400 } else if (rightMatch && openTokens) { 401 if (!--openTokens) { 402 if (vN) { 403 if (vN[0] && outerStart > lastOuterEnd) { 404 output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart)); 405 } 406 if (vN[1]) { 407 output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart)); 408 } 409 if (vN[2]) { 410 output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart)); 411 } 412 if (vN[3]) { 413 output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd)); 414 } 415 } else { 416 output.push(str.slice(innerStart, delimStart)); 417 } 418 lastOuterEnd = delimEnd; 419 if (!global) { 420 break; 421 } 422 } 423 } else { 424 throw new Error('Unbalanced delimiter found in string'); 425 } 426 // If the delimiter matched an empty string, avoid an infinite loop 427 if (delimStart === delimEnd) { 428 ++delimEnd; 429 } 430 } 431 432 if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) { 433 output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length)); 434 } 435 436 return output; 437 }; 438 439 }; 440 441 }, {}
441], 3: [function (require, module, exports) { 442 /*! 443 * XRegExp Unicode Base 3.2.0 444 * <xregexp.com> 445 * Steven Levithan (c) 2008-2017 MIT License 446 */ 447 448 module.exports = function (XRegExp) { 449 'use strict'; 450 451 /** 452 * Adds base support for Unicode matching: 453 * - Adds syntax `\p{..}` for matching Unicode tokens. Tokens can be inverted using `\P{..}` or 454 * `\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the 455 * braces for token names that are a single letter (e.g. `\pL` or `PL`). 456 * - Adds flag A (astral), which enables 21-bit Unicode support. 457 * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data. 458 * 459 * Unicode Base relies on externally provided Unicode character data. Official addons are 460 * available to provide data for Unicode categories, scripts, blocks, and properties. 461 * 462 * @requires XRegExp 463 */ 464 465 // ==--------------------------== 466 // Private stuff 467 // ==--------------------------== 468 469 // Storage for Unicode data 470 var unicode = {}; 471 472 // Reuse utils 473 var dec = XRegExp._dec; 474 var hex = XRegExp._hex; 475 var pad4 = XRegExp._pad4; 476 477 // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed 478 function normalize(name) { 479 return name.replace(/[- _]+/g, '').toLowerCase(); 480 } 481 482 // Gets the decimal code of a literal code unit, \xHH, \uHHHH, or a backslash-escaped literal 483 function charCode(chr) { 484 var esc = /^\\[xu](.+)/.exec(chr); 485 return esc ? 486 dec(esc[1]) : 487 chr.charCodeAt(chr.charAt(0) === '\\' ? 1 : 0); 488 } 489 490 // Inverts a list of ordered BMP characters and ranges 491 function invertBmp(range) { 492 var output = ''; 493 var lastEnd = -1; 494 495 XRegExp.forEach( 496 range, 497 /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, 498 function (m) { 499 var start = charCode(m[1]); 500 if (start > (lastEnd + 1)) { 501 output += '\\u' + pad4(hex(lastEnd + 1)); 502 if (start > (lastEnd + 2)) { 503 output += '-\\u' + pad4(hex(start - 1)); 504 } 505 } 506 lastEnd = charCode(m[2] || m[1]); 507 } 508 ); 509 510 if (lastEnd < 0xFFFF) { 511 output += '\\u' + pad4(hex(lastEnd + 1)); 512 if (lastEnd < 0xFFFE) { 513 output += '-\\uFFFF'; 514 } 515 } 516 517 return output; 518 } 519 520 // Generates an inverted BMP range on first use 521 function cacheInvertedBmp(slug) { 522 var prop = 'b!'; 523 return ( 524 unicode[slug][prop] || 525 (unicode[slug][prop] = invertBmp(unicode[slug].bmp)) 526 ); 527 } 528 529 // Combines and optionally negates BMP and astral data 530 function buildAstral(slug, isNegated) { 531 var item = unicode[slug]; 532 var combined = ''; 533 534 if (item.bmp && !item.isBmpLast) { 535 combined = '[' + item.bmp + ']' + (item.astral ? '|' : ''); 536 } 537 if (item.astral) {
538 combined += item.astral; 539 } 540 if (item.isBmpLast && item.bmp) { 541 combined += (item.astral ? '|' : '') + '[' + item.bmp + ']'; 542 } 543 544 // Astral Unicode tokens always match a code point, never a code unit 545 return isNegated ? 546 '(?:(?!' + combined + ')(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))' : 547 '(?:' + combined + ')'; 548 } 549 550 // Builds a complete astral pattern on first use 551 function cacheAstral(slug, isNegated) { 552 var prop = isNegated ? 'a!' : 'a='; 553 return ( 554 unicode[slug][prop] || 555 (unicode[slug][prop] = buildAstral(slug, isNegated)) 556 ); 557 } 558 559 // ==--------------------------== 560 // Core functionality 561 // ==--------------------------== 562 563 /* 564 * Add astral mode (flag A) and Unicode token syntax: `\p{..}`, `\P{..}`, `\p{^..}`, `\pC`. 565 */ 566 XRegExp.addToken( 567 // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}` 568 /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, 569 function (match, scope, flags) { 570 var ERR_DOUBLE_NEG = 'Invalid double negation '; 571 var ERR_UNKNOWN_NAME = 'Unknown Unicode token '; 572 var ERR_UNKNOWN_REF = 'Unicode token missing data '; 573 var ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token '; 574 var ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes'; 575 // Negated via \P{..} or \p{^..} 576 var isNegated = match[1] === 'P' || !!match[2]; 577 // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A 578 var isAstralMode = flags.indexOf('A') > -1; 579 // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}` 580 var slug = normalize(match[4] || match[3]); 581 // Token data object 582 var item = unicode[slug]; 583 584 if (match[1] === 'P' && match[2]) { 585 throw new SyntaxError(ERR_DOUBLE_NEG + match[0]); 586 } 587 if (!unicode.hasOwnProperty(slug)) { 588 throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]); 589 } 590 591 // Switch to the negated form of the referenced Unicode token 592 if (item.inverseOf) { 593 slug = normalize(item.inverseOf); 594 if (!unicode.hasOwnProperty(slug)) { 595 throw new ReferenceError(ERR_UNKNOWN_REF + match[0] + ' -> ' + item.inverseOf); 596 } 597 item = unicode[slug]; 598 isNegated = !isNegated; 599 } 600 601 if (!(item.bmp || isAstralMode)) { 602 throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]); 603 } 604 if (isAstralMode) { 605 if (scope === 'class') { 606 throw new SyntaxError(ERR_ASTRAL_IN_CLASS); 607 } 608 609 return cacheAstral(slug, isNegated); 610 } 611 612 return scope === 'class' ? 613 (isNegated ? cacheInvertedBmp(slug) : item.bmp) : 614 (isNegated ? '[^' : '[') + item.bmp + ']'; 615 }, 616 { 617 scope: 'all', 618 optionalFlags: 'A', 619 leadChar: '\\' 620 } 621 ); 622 623 /** 624 * Adds to the list of Unicode tokens that XRegExp regexes can match via `\p` or `\P`. 625 * 626 * @memberOf XRegExp 627 * @param {Array} data Objects with named character ranges. Each object may have properties 628 * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are 629 * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If 630 * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent, 631 * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are 632 * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and 633 * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan 634 * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and 635 * `astral` data should be a combination of literal characters and `\xHH` or `\uHHHH` escape 636 * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be 637 * escaped, apart from range-creating hyphens. The `astral` data can additionally use 638 * character classes and alternation, and should use surrogate pairs to represent astral code 639 * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is 640 * defined as the exact inverse of another token. 641 * @example 642 * 643 * // Basic use 644 * XRegExp.addUnicodeData([{ 645 * name: 'XDigit', 646 * alias: 'Hexadecimal', 647 * bmp: '0-9A-Fa-f' 648 * }]); 649 * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true 650 */ 651 XRegExp.addUnicodeData = function (data) { 652 var ERR_NO_NAME = 'Unicode token requires name'; 653 var ERR_NO_DATA = 'Unicode token has no character data '; 654 var item; 655 656 for (var i = 0; i < data.length; ++i) { 657 item = data[i]; 658 if (!item.name) { 659 throw new Error(ERR_NO_NAME); 660 } 661 if (!(item.inverseOf || item.bmp || item.astral)) { 662 throw new Error(ERR_NO_DATA + item.name); 663 } 664 unicode[normalize(item.name)] = item; 665 if (item.alias) { 666 unicode[normalize(item.alias)] = item; 667 } 668 } 669 670 // Reset the pattern cache used by the `XReg
670Exp` constructor, since the same pattern and 671 // flags might now produce different results 672 XRegExp.cache.flush('patterns'); 673 }; 674 675 /** 676 * @ignore 677 * 678 * Return a reference to the internal Unicode definition structure for the given Unicode 679 * Property if the given name is a legal Unicode Property for use in XRegExp `\p` or `\P` regex 680 * constructs. 681 * 682 * @memberOf XRegExp 683 * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive), 684 * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode 685 * Properties and Property Aliases. 686 * @returns {Object} Reference to definition structure when the name matches a Unicode Property. 687 * 688 * @note 689 * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories. 690 * 691 * @note 692 * This method is *not* part of the officially documented API and may change or be removed in 693 * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode 694 * structures set up by XRegExp. 695 */ 696 XRegExp._getUnicodeProperty = function (name) { 697 var slug = normalize(name); 698 return unicode[slug]; 699 }; 700 701 }; 702 703 }, {}], 4: [function (require, module, exports) { 704 /*! 705 * XRegExp Unicode Blocks 3.2.0 706 * <xregexp.com> 707 * Steven Levithan (c) 2010-2017 MIT License 708 * Unicode data by Mathias Bynens <mathiasbynens.be> 709 */ 710 711 module.exports = function (XRegExp) { 712 'use strict'; 713 714 /** 715 * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., 716 * `\p{InBasicLatin}`. Token names are case insensitive, and any spaces, hyphens, and 717 * underscores are ignored. 718 * 719 * Uses Unicode 9.0.0. 720 * 721 * @requires XRegExp, Unicode Base 722 */ 723 724 if (!XRegExp.addUnicodeData) { 725 throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks'); 726 } 727 728 XRegExp.addUnicodeData([ 729 { 730 name: 'InAdlam', 731 astral: '\uD83A[\uDD00-\uDD5F]' 732 }, 733 { 734 name: 'InAegean_Numbers', 735 astral: '\uD800[\uDD00-\uDD3F]' 736 }, 737 { 738 name: 'InAhom', 739 astral: '\uD805[\uDF00-\uDF3F]' 740 }, 741 { 742 name: 'InAlchemical_Symbols', 743 astral: '\uD83D[\uDF00-\uDF7F]' 744 }, 745 { 746 name: 'InAlphabetic_Presentation_Forms', 747 bmp: '\uFB00-\uFB4F' 748 }, 749 { 750 name: 'InAnatolian_Hieroglyphs', 751 astral: '\uD811[\uDC00-\uDE7F]' 752 }, 753 { 754 name: 'InAncient_Greek_Musical_Notation', 755 astral: '\uD834[\uDE00-\uDE4F]' 756 }, 757 { 758 name: 'InAncient_Greek_Numbers', 759 astral: '\uD800[\uDD40-\uDD8F]' 760 }, 761 { 762 name: 'InAncient_Symbols', 763 astral: '\uD800[\uDD90-\uDDCF]' 764 }, 765 { 766 name: 'InArabic', 767 bmp: '\u0600-\u06FF' 768 }, 769 { 770 name: 'InArabic_Extended_A', 771 bmp: '\u08A0-\u08FF' 772 }, 773 { 774 name: 'InArabic_Mathematical_Alphabetic_Symbols', 775 astral: '\uD83B[\uDE00-\uDEFF]' 776 }, 777 { 778 name: 'InArabic_Presentation_Forms_A', 779 bmp: '\uFB50-\uFDFF' 780 }, 781 { 782 name: 'InArabic_Presentation_Forms_B', 783 bmp: '\uFE70-\uFEFF' 784 }, 785 { 786 name: 'InArabic_Supplement', 787 bmp: '\u0750-\u077F' 788 }, 789 { 790 name: 'InArmenian', 791 bmp: '\u0530-\u058F' 792 }, 793 { 794 name: 'InArrows', 795 bmp: '\u2190-\u21FF' 796 }, 797 { 798 name: 'InAvestan', 799 astral: '\uD802[\uDF00-\uDF3F]' 800 }, 801 { 802 name: 'InBalinese', 803 bmp: '\u1B00-\u1B7F' 804 }, 805 { 806 name: 'InBamum', 807 bmp: '\uA6A0-\uA6FF' 808 }, 809 { 810 name: 'InBamum_Supplement', 811 astral: '\uD81A[\uDC00-\uDE3F]' 812 }, 813 { 814 name: 'InBasic_Latin', 815 bmp: '\0-\x7F' 816 }, 817 { 818 name: 'InBassa_Vah', 819 astral: '\uD81A[\uDED0-\uDEFF]' 820 }, 821 { 822 name: 'InBatak', 823 bmp: '\u1BC0-\u1BFF' 824 }, 825 { 826 name: 'InBengali', 827 bmp: '\u0980-\u09FF' 828 }, 829 { 830 name: 'InBhaiksuki', 831 astral: '\uD807[\uDC00-\uDC6F]' 832 }, 833 { 834 name: 'InBlock_Elements', 835 bmp: '\u2580-\u259F' 836 }, 837 { 838 name: 'InBopomofo', 839 bmp: '\u3100-\u312F' 840 }, 841 { 842 name: 'InBopomofo_Extended', 843 bmp: '\u31A0-\u31BF' 844 }, 845 { 846 name: 'InBox_Drawing', 847 bmp: '\u2500-\u257F' 848 }, 849 { 850 name: 'InBrahmi', 851 astral: '\uD804[\uDC00-\uDC7F]' 852 }, 853 { 854 name: 'InBraille_Patterns', 855 bmp: '\u2800-\u28FF' 856 }, 857 { 858 name: 'InBuginese', 859 bmp: '\u1A00-\u1A1F' 860 }, 861 { 862 name: 'InBuhid', 863 bmp: '\u1740-\u175F' 864 }, 865 { 866 name: 'InByzantine_Musical_Symbols', 867 astral: '\uD834[\uDC00-\uDCFF]' 868 }, 869 { 870 name: 'InCJK_Compatibility', 871 bmp: '\u3300-\u33FF' 872 }, 873 { 874 name: 'InCJK_Compatibility_Forms', 875 bmp: '\uFE30-\uFE4F' 876 }, 877 { 878 name: 'InCJK_Compatibility_Ideographs', 879 bmp: '\uF900-\uFAFF' 880 }, 881 { 882 name: 'InCJK_Compatibility_Ideographs_Supplement', 883 astral: '\uD87E[\uDC00-\uDE1F]' 884 }, 885 { 886 name: 'InCJK_Radicals_Supplement', 887 bmp: '\u2E80-\u2EFF' 888 }, 889 { 890 name: 'InCJK_Strokes', 891 bmp: '\u31C0-\u31EF' 892 }, 893 { 894 name: 'InCJK_Symbols_and_Punctuation', 895 bmp: '\u3000-\u303F' 896 }, 897 { 898 name: 'InCJK_Unified_Ideographs', 899 bmp: '\u4E00-\u9FFF' 900 }, 901 { 902 name: 'InCJK_Unified_Ideographs_Extension_A', 903 bmp: '\u3400-\u4DBF' 904 }, 905 { 906 name: 'InCJK_Unified_Ideographs_Extension_B', 907 astral: '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]' 908 }, 909 { 910 name: 'InCJK_Unified_Ideographs_Extension_C', 911 astral: '\uD869[\uDF00-\uDFFF]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF3F]' 912 }, 913 { 914 name: 'InCJK_Unified_Ideographs_Extension_D', 915 astral: '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]' 916 }, 917 { 918 name: 'InCJK_Unified_Ideographs_Extension_E', 919 astral: '\uD86E[\uDC20-\uDFFF]|[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]' 920 }, 921 { 922 name: 'InCarian', 923 astral: '\uD800[\uDEA0-\uDEDF]' 924 }, 925 { 926 name: 'InCaucasian_Albanian', 927 astral: '\uD801[\uDD30-\uDD6F]' 928 }, 929 { 930 name: 'InChakma', 931 astral: '\uD804[\uDD00-\uDD4F]' 932 }, 933 { 934 name: 'InCham', 935 bmp: '\uAA00-\uAA5F' 936 }, 937 { 938 name: 'InCherokee', 939 bmp: '\u13A0-\u13FF' 940 }, 941 { 942 name: 'InCherokee_Supplement', 943 bmp: '\uAB70-\uABBF' 944 }, 945 { 946 name: 'InCombining_Diacritical_Marks', 947 bmp: '\u0300-\u036F' 948 }, 949 { 950 name: 'InCombining_Diacritical_Marks_Extended', 951 bmp: '\u1AB0-\u1AFF' 952 }, 953 { 954 name: 'InCombining_Diacritical_Marks_Supplement', 955 bmp: '\u1DC0-\u1DFF' 956 }, 957 { 958 name: 'InCombining_Diacritical_Marks_for_Symbols', 959 bmp: '\u20D0-\u20FF' 960 }, 961 { 962 name: 'InCombining_Half_Marks', 963 bmp: '\uFE20-\uFE2F' 964 }, 965 { 966 name: 'InCommon_Indic_Number_Forms', 967 bmp: '\uA830-\uA83F' 968 }, 969 { 970 name: 'InControl_Pictures', 971 bmp: '\u2400-\u243F' 972 }, 973 { 974 name: 'InCoptic', 975 bmp: '\u2C80-\u2CFF' 976 }, 977 { 978 name: 'InCoptic_Epact_Numbers', 979 astral: '\uD800[\uDEE0-\uDEFF]' 980 }, 981 { 982 name: 'InCounting_Rod_Numerals', 983 astral: '\uD834[\uDF60-\uDF7F]' 984 }, 985 { 986 name: 'InCuneiform', 987 astral: '\uD808[\uDC00-\uDFFF]' 988 }, 989 { 990 name: 'InCuneiform_Numbers_and_Punctuation', 991 astral: '\uD809[\uDC00-\uDC7F]' 992 }, 993 { 994 name: 'InCurrency_Symbols', 995 bmp: '\u20A0-\u20CF' 996 }, 997 { 998 name: 'InCypriot_Syllabary', 999 astral: '\uD802[\uDC00-\uDC3F]'
1000 }, 1001 { 1002 name: 'InCyrillic', 1003 bmp: '\u0400-\u04FF' 1004 }, 1005 { 1006 name: 'InCyrillic_Extended_A', 1007 bmp: '\u2DE0-\u2DFF' 1008 }, 1009 { 1010 name: 'InCyrillic_Extended_B', 1011 bmp: '\uA640-\uA69F' 1012 }, 1013 { 1014 name: 'InCyrillic_Extended_C', 1015 bmp: '\u1C80-\u1C8F' 1016 }, 1017 { 1018 name: 'InCyrillic_Supplement', 1019 bmp: '\u0500-\u052F' 1020 }, 1021 { 1022 name: 'InDeseret', 1023 astral: '\uD801[\uDC00-\uDC4F]' 1024 }, 1025 { 1026 name: 'InDevanagari', 1027 bmp: '\u0900-\u097F' 1028 }, 1029 { 1030 name: 'InDevanagari_Extended', 1031 bmp: '\uA8E0-\uA8FF' 1032 }, 1033 { 1034 name: 'InDingbats', 1035 bmp: '\u2700-\u27BF' 1036 }, 1037 { 1038 name: 'InDomino_Tiles', 1039 astral: '\uD83C[\uDC30-\uDC9F]' 1040 }, 1041 { 1042 name: 'InDuployan', 1043 astral: '\uD82F[\uDC00-\uDC9F]' 1044 }, 1045 { 1046 name: 'InEarly_Dynastic_Cuneiform', 1047 astral: '\uD809[\uDC80-\uDD4F]' 1048 }, 1049 { 1050 name: 'InEgyptian_Hieroglyphs', 1051 astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]' 1052 }, 1053 { 1054 name: 'InElbasan', 1055 astral: '\uD801[\uDD00-\uDD2F]' 1056 }, 1057 { 1058 name: 'InEmoticons', 1059 astral: '\uD83D[\uDE00-\uDE4F]' 1060 }, 1061 { 1062 name: 'InEnclosed_Alphanumeric_Supplement', 1063 astral: '\uD83C[\uDD00-\uDDFF]' 1064 }, 1065 { 1066 name: 'InEnclosed_Alphanumerics', 1067 bmp: '\u2460-\u24FF' 1068 }, 1069 { 1070 name: 'InEnclosed_CJK_Letters_and_Months', 1071 bmp: '\u3200-\u32FF' 1072 }, 1073 { 1074 name: 'InEnclosed_Ideographic_Supplement', 1075 astral: '\uD83C[\uDE00-\uDEFF]' 1076 }, 1077 { 1078 name: 'InEthiopic', 1079 bmp: '\u1200-\u137F' 1080 }, 1081 { 1082 name: 'InEthiopic_Extended', 1083 bmp: '\u2D80-\u2DDF' 1084 }, 1085 { 1086 name: 'InEthiopic_Extended_A', 1087 bmp: '\uAB00-\uAB2F' 1088 }, 1089 { 1090 name: 'InEthiopic_Supplement', 1091 bmp: '\u1380-\u139F' 1092 }, 1093 { 1094 name: 'InGeneral_Punctuation', 1095 bmp: '\u2000-\u206F' 1096 }, 1097 { 1098 name: 'InGeometric_Shapes', 1099 bmp: '\u25A0-\u25FF' 1100 }, 1101 { 1102 name: 'InGeometric_Shapes_Extended', 1103 astral: '\uD83D[\uDF80-\uDFFF]' 1104 }, 1105 { 1106 name: 'InGeorgian', 1107 bmp: '\u10A0-\u10FF' 1108 }, 1109 { 1110 name: 'InGeorgian_Supplement', 1111 bmp: '\u2D00-\u2D2F' 1112 }, 1113 { 1114 name: 'InGlagolitic', 1115 bmp: '\u2C00-\u2C5F' 1116 }, 1117 { 1118 name: 'InGlagolitic_Supplement', 1119 astral: '\uD838[\uDC00-\uDC2F]' 1120 }, 1121 { 1122 name: 'InGothic', 1123 astral: '\uD800[\uDF30-\uDF4F]' 1124 }, 1125 { 1126 name: 'InGrantha', 1127 astral: '\uD804[\uDF00-\uDF7F]' 1128 }, 1129 { 1130 name: 'InGreek_Extended', 1131 bmp: '\u1F00-\u1FFF' 1132 }, 1133 { 1134 name: 'InGreek_and_Coptic', 1135 bmp: '\u0370-\u03FF' 1136 }, 1137 { 1138 name: 'InGujarati', 1139 bmp: '\u0A80-\u0AFF' 1140 }, 1141 { 1142 name: 'InGurmukhi', 1143 bmp: '\u0A00-\u0A7F' 1144 }, 1145 { 1146 name: 'InHalfwidth_and_Fullwidth_Forms', 1147 bmp: '\uFF00-\uFFEF' 1148 }, 1149 { 1150 name: 'InHangul_Compatibility_Jamo', 1151 bmp: '\u3130-\u318F' 1152 }, 1153 { 1154 name: 'InHangul_Jamo', 1155 bmp: '\u1100-\u11FF' 1156 }, 1157 { 1158 name: 'InHangul_Jamo_Extended_A', 1159 bmp: '\uA960-\uA97F' 1160 }, 1161 { 1162 name: 'InHangul_Jamo_Extended_B', 1163 bmp: '\uD7B0-\uD7FF' 1164 }, 1165 { 1166 name: 'InHangul_Syllables', 1167 bmp: '\uAC00-\uD7AF' 1168 }, 1169 { 1170 name: 'InHanunoo', 1171 bmp: '\u1720-\u173F' 1172 }, 1173 { 1174 name: 'InHatran', 1175 astral: '\uD802[\uDCE0-\uDCFF]' 1176 }, 1177 { 1178 name: 'InHebrew', 1179 bmp: '\u0590-\u05FF' 1180 }, 1181 { 1182 name: 'InHigh_Private_Use_Surrogates', 1183 bmp: '\uDB80-\uDBFF' 1184 }, 1185 { 1186 name: 'InHigh_Surrogates', 1187 bmp: '\uD800-\uDB7F' 1188 }, 1189 { 1190 name: 'InHiragana', 1191 bmp: '\u3040-\u309F' 1192 }, 1193 { 1194 name: 'InIPA_Extensions', 1195 bmp: '\u0250-\u02AF' 1196 }, 1197 { 1198 name: 'InIdeographic_Description_Characters', 1199 bmp: '\u2FF0-\u2FFF' 1200 }, 1201 { 1202 name: 'InIdeographic_Symbols_and_Punctuation', 1203 astral: '\uD81B[\uDFE0-\uDFFF]' 1204 }, 1205 { 1206 name: 'InImperial_Aramaic', 1207 astral: '\uD802[\uDC40-\uDC5F]' 1208 }, 1209 { 1210 name: 'InInscriptional_Pahlavi', 1211 astral: '\uD802[\uDF60-\uDF7F]' 1212 }, 1213 { 1214 name: 'InInscriptional_Parthian', 1215 astral: '\uD802[\uDF40-\uDF5F]' 1216 }, 1217 { 1218 name: 'InJavanese', 1219 bmp: '\uA980-\uA9DF' 1220 }, 1221 { 1222 name: 'InKaithi', 1223 astral: '\uD804[\uDC80-\uDCCF]' 1224 }, 1225 { 1226 name: 'InKana_Supplement', 1227 astral: '\uD82C[\uDC00-\uDCFF]' 1228 }, 1229 { 1230 name: 'InKanbun', 1231 bmp: '\u3190-\u319F' 1232 }, 1233 { 1234 name: 'InKangxi_Radicals', 1235 bmp: '\u2F00-\u2FDF' 1236 }, 1237 { 1238 name: 'InKannada', 1239 bmp: '\u0C80-\u0CFF' 1240 }, 1241 { 1242 name: 'InKatakana', 1243 bmp: '\u30A0-\u30FF' 1244 }, 1245 {
1246 name: 'InKatakana_Phonetic_Extensions', 1247 bmp: '\u31F0-\u31FF' 1248 }, 1249 { 1250 name: 'InKayah_Li', 1251 bmp: '\uA900-\uA92F' 1252 }, 1253 { 1254 name: 'InKharoshthi', 1255 astral: '\uD802[\uDE00-\uDE5F]' 1256 }, 1257 { 1258 name: 'InKhmer', 1259 bmp: '\u1780-\u17FF' 1260 }, 1261 { 1262 name: 'InKhmer_Symbols', 1263 bmp: '\u19E0-\u19FF' 1264 }, 1265 { 1266 name: 'InKhojki', 1267 astral: '\uD804[\uDE00-\uDE4F]' 1268 }, 1269 { 1270 name: 'InKhudawadi', 1271 astral: '\uD804[\uDEB0-\uDEFF]' 1272 }, 1273 { 1274 name: 'InLao', 1275 bmp: '\u0E80-\u0EFF' 1276 }, 1277 { 1278 name: 'InLatin_Extended_Additional', 1279 bmp: '\u1E00-\u1EFF' 1280 }, 1281 { 1282 name: 'InLatin_Extended_A',
1283 bmp: '\u0100-\u017F' 1284 }, 1285 { 1286 name: 'InLatin_Extended_B', 1287 bmp: '\u0180-\u024F' 1288 }, 1289 { 1290 name: 'InLatin_Extended_C', 1291 bmp: '\u2C60-\u2C7F' 1292 }, 1293 { 1294 name: 'InLatin_Extended_D', 1295 bmp: '\uA720-\uA7FF' 1296 }, 1297 { 1298 name: 'InLatin_Extended_E', 1299 bmp: '\uAB30-\uAB6F' 1300 }, 1301 { 1302 name: 'InLatin_1_Supplement', 1303 bmp: '\x80-\xFF' 1304 }, 1305 { 1306 name: 'InLepcha', 1307 bmp: '\u1C00-\u1C4F' 1308 }, 1309 { 1310 name: 'InLetterlike_Symbols', 1311 bmp: '\u2100-\u214F' 1312 }, 1313 { 1314 name: 'InLimbu', 1315 bmp: '\u1900-\u194F' 1316 }, 1317 { 1318 name: 'InLinear_A', 1319 astral: '\uD801[\uDE00-\uDF7F]' 1320 }, 1321 { 1322 name: 'InLinear_B_Ideograms', 1323 astral: '\uD800[\uDC80-\uDCFF]' 1324 }, 1325 { 1326 name: 'InLinear_B_Syllabary', 1327 astral: '\uD800[\uDC00-\uDC7F]' 1328 }, 1329 { 1330 name: 'InLisu', 1331 bmp: '\uA4D0-\uA4FF' 1332 }, 1333 { 1334 name: 'InLow_Surrogates', 1335 bmp: '\uDC00-\uDFFF' 1336 }, 1337 { 1338 name: 'InLycian', 1339 astral: '\uD800[\uDE80-\uDE9F]' 1340 }, 1341 { 1342 name: 'InLydian', 1343 astral: '\uD802[\uDD20-\uDD3F]' 1344 }, 1345 { 1346 name: 'InMahajani', 1347 astral: '\uD804[\uDD50-\uDD7F]' 1348 }, 1349 { 1350 name: 'InMahjong_Tiles', 1351 astral: '\uD83C[\uDC00-\uDC2F]' 1352 }, 1353 { 1354 name: 'InMalayalam', 1355 bmp: '\u0D00-\u0D7F' 1356 }, 1357 { 1358 name: 'InMandaic', 1359 bmp: '\u0840-\u085F' 1360 }, 1361 { 1362 name: 'InManichaean', 1363 astral: '\uD802[\uDEC0-\uDEFF]' 1364 }, 1365 { 1366 name: 'InMarchen', 1367 astral: '\uD807[\uDC70-\uDCBF]' 1368 }, 1369 { 1370 name: 'InMathematical_Alphanumeric_Symbols', 1371 astral: '\uD835[\uDC00-\uDFFF]' 1372 }, 1373 { 1374 name: 'InMathematical_Operators', 1375 bmp: '\u2200-\u22FF' 1376 }, 1377 { 1378 name: 'InMeetei_Mayek', 1379 bmp: '\uABC0-\uABFF' 1380 }, 1381 { 1382 name: 'InMeetei_Mayek_Extensions', 1383 bmp: '\uAAE0-\uAAFF' 1384 }, 1385 { 1386 name: 'InMende_Kikakui', 1387 astral: '\uD83A[\uDC00-\uDCDF]' 1388 }, 1389 { 1390 name: 'InMeroitic_Cursive', 1391 astral: '\uD802[\uDDA0-\uDDFF]' 1392 }, 1393 { 1394 name: 'InMeroitic_Hieroglyphs', 1395 astral: '\uD802[\uDD80-\uDD9F]' 1396 }, 1397 { 1398 name: 'InMiao', 1399 astral: '\uD81B[\uDF00-\uDF9F]' 1400 }, 1401 { 1402 name: 'InMiscellaneous_Mathematical_Symbols_A', 1403 bmp: '\u27C0-\u27EF' 1404 }, 1405 { 1406 name: 'InMiscellaneous_Mathematical_Symbols_B', 1407 bmp: '\u2980-\u29FF'
1408 }, 1409 { 1410 name: 'InMiscellaneous_Symbols', 1411 bmp: '\u2600-\u26FF' 1412 }, 1413 { 1414 name: 'InMiscellaneous_Symbols_and_Arrows', 1415 bmp: '\u2B00-\u2BFF' 1416 }, 1417 { 1418 name: 'InMiscellaneous_Symbols_and_Pictographs', 1419 astral: '\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF]' 1420 }, 1421 { 1422 name: 'InMiscellaneous_Technical', 1423 bmp: '\u2300-\u23FF' 1424 }, 1425 { 1426 name: 'InModi', 1427 astral: '\uD805[\uDE00-\uDE5F]' 1428 }, 1429 { 1430 name: 'InModifier_Tone_Letters', 1431 bmp: '\uA700-\uA71F' 1432 }, 1433 { 1434 name: 'InMongolian', 1435 bmp: '\u1800-\u18AF' 1436 }, 1437 { 1438 name: 'InMongolian_Supplement', 1439 astral: '\uD805[\uDE60-\uDE7F]' 1440 }, 1441 { 1442 name: 'InMro', 1443 astral: '\uD81A[\uDE40-\uDE6F]' 1444 }, 1445 { 1446 name: 'InMultani', 1447 astral: '\uD804[\uDE80-\uDEAF]' 1448 }, 1449 { 1450 name: 'InMusical_Symbols', 1451 astral: '\uD834[\uDD00-\uDDFF]' 1452 }, 1453 { 1454 name: 'InMyanmar', 1455 bmp: '\u1000-\u109F' 1456 }, 1457 { 1458 name: 'InMyanmar_Extended_A', 1459 bmp: '\uAA60-\uAA7F' 1460 }, 1461 { 1462 name: 'InMyanmar_Extended_B', 1463 bmp: '\uA9E0-\uA9FF' 1464 }, 1465 { 1466 name: 'InNKo', 1467 bmp: '\u07C0-\u07FF' 1468 }, 1469 { 1470 name: 'InNabataean', 1471 astral: '\uD802[\uDC80-\uDCAF]' 1472 }, 1473 { 1474 name: 'InNew_Tai_Lue', 1475 bmp: '\u1980-\u19DF' 1476 }, 1477 { 1478 name: 'InNewa', 1479 astral: '\uD805[\uDC00-\uDC7F]' 1480 }, 1481 { 1482 name: 'InNumber_Forms', 1483 bmp: '\u2150-\u218F' 1484 }, 1485 { 1486 name: 'InOgham', 1487 bmp: '\u1680-\u169F' 1488 }, 1489 { 1490 name: 'InOl_Chiki', 1491 bmp: '\u1C50-\u1C7F' 1492 }, 1493 { 1494 name: 'InOld_Hungarian', 1495 astral: '\uD803[\uDC80-\uDCFF]' 1496 }, 1497 { 1498 name: 'InOld_Italic', 1499 astral: '\uD800[\uDF00-\uDF2F]' 1500 }, 1501 { 1502 name: 'InOld_North_Arabian', 1503 astral: '\uD802[\uDE80-\uDE9F]' 1504 }, 1505 { 1506 name: 'InOld_Permic', 1507 astral: '\uD800[\uDF50-\uDF7F]' 1508 }, 1509 { 1510 name: 'InOld_Persian', 1511 astral: '\uD800[\uDFA0-\uDFDF]' 1512 }, 1513 { 1514 name: 'InOld_South_Arabian', 1515 astral: '\uD802[\uDE60-\uDE7F]' 1516 }, 1517 { 1518 name: 'InOld_Turkic', 1519 astral: '\uD803[\uDC00-\uDC4F]' 1520 }, 1521 { 1522 name: 'InOptical_Character_Recognition', 1523 bmp: '\u2440-\u245F' 1524 }, 1525 { 1526 name: 'InOriya', 1527 bmp: '\u0B00-\u0B7F' 1528 }, 1529 { 1530 name: 'InOrnamental_Dingbats', 1531 astral: '\uD83D[\uDE50-\uDE7F]' 1532 }, 1533 { 1534 name: 'InOsage', 1535 astral: '\uD801[\uDCB0-\uDCFF]' 1536 }, 1537 { 1538 name: 'InOsmanya', 1539 astral: '\uD801[\uDC80-\uDCAF]' 1540 }, 1541 { 1542 name: 'InPahawh_Hmong', 1543 astral: '\uD81A[\uDF00-\uDF8F]' 1544 }, 1545 { 1546 name: 'InPalmyrene', 1547 astral: '\uD802[\uDC60-\uDC7F]' 1548 }, 1549 { 1550 name: 'InPau_Cin_Hau', 1551 astral: '\uD806[\uDEC0-\uDEFF]' 1552 }, 1553 { 1554 name: 'InPhags_pa', 1555 bmp: '\uA840-\uA87F' 1556 }, 1557 { 1558 name: 'InPhaistos_Disc', 1559 astral: '\uD800[\uDDD0-\uDDFF]' 1560 }, 1561 { 1562 name: 'InPhoenician', 1563 astral: '\uD802[\uDD00-\uDD1F]' 1564 }, 1565 { 1566 name: 'InPhonetic_Extensions', 1567 bmp: '\u1D00-\u1D7F' 1568 }, 1569 { 1570 name: 'InPhonetic_Extensions_Supplement', 1571 bmp: '\u1D80-\u1DBF' 1572 }, 1573 { 1574 name: 'InPlaying_Cards', 1575 astral: '\uD83C[\uDCA0-\uDCFF]' 1576 }, 1577 { 1578 name: 'InPrivate_Use_Area', 1579 bmp: '\uE000-\uF8FF' 1580 }, 1581 { 1582 name: 'InPsalter_Pahlavi', 1583 astral: '\uD802[\uDF80-\uDFAF]' 1584 }, 1585 { 1586 name: 'InRejang', 1587 bmp: '\uA930-\uA95F' 1588 }, 1589 { 1590 name: 'InRumi_Numeral_Symbols', 1591 astral: '\uD803[\uDE60-\uDE7F]' 1592 }, 1593 { 1594 name: 'InRunic', 1595 bmp: '\u16A0-\u16FF' 1596 }, 1597 { 1598 name: 'InSamaritan', 1599 bmp: '\u0800-\u083F' 1600 }, 1601 { 1602 name: 'InSaurashtra', 1603 bmp: '\uA880-\uA8DF' 1604 }, 1605 { 1606 name: 'InSharada', 1607 astral: '\uD804[\uDD80-\uDDDF]' 1608 }, 1609 { 1610 name: 'InShavian', 1611 astral: '\uD801[\uDC50-\uDC7F]' 1612 }, 1613 { 1614 name: 'InShorthand_Format_Controls', 1615 astral: '\uD82F[\uDCA0-\uDCAF]' 1616 }, 1617 { 1618 name: 'InSiddham', 1619 astral: '\uD805[\uDD80-\uDDFF]' 1620 }, 1621 { 1622 name: 'InSinhala', 1623 bmp: '\u0D80-\u0DFF' 1624 }, 1625 { 1626 name: 'InSinhala_Archaic_Numbers', 1627 astral: '\uD804[\uDDE0-\uDDFF]' 1628 }, 1629 { 1630 name: 'InSmall_Form_Variants', 1631 bmp: '\uFE50-\uFE6F' 1632 }, 1633 { 1634 name: 'InSora_Sompeng', 1635 astral: '\uD804[\uDCD0-\uDCFF]' 1636 }, 1637 { 1638 name: 'InSpacing_Modifier_Letters', 1639 bmp: '\u02B0-\u02FF' 1640 }, 1641 { 1642 name: 'InSpecials', 1643 bmp: '\uFFF0-\uFFFF' 1644 }, 1645 { 1646 name: 'InSundanese', 1647 bmp: '\u1B80-\u1BBF' 1648 }, 1649 { 1650 name: 'InSundanese_Supplement', 1651 bmp: '\u1CC0-\u1CCF' 1652 }, 1653 { 1654 name: 'InSuperscripts_and_Subscripts', 1655 bmp: '\u2070-\u209F' 1656 }, 1657 { 1658 name: 'InSupplemental_Arrows_A', 1659 bmp: '\u27F0-\u27FF' 1660 }, 1661 { 1662 name: 'InSupplemental_Arrows_B', 1663 bmp: '\u2900-\u297F' 1664 }, 1665 { 1666 name: 'InSupplemental_Arrows_C', 1667 astral: '\uD83E[\uDC00-\uDCFF]' 1668 }, 1669 { 1670 name: 'InSupplemental_Mathematical_Operators', 1671 bmp: '\u2A00-\u2AFF' 1672 }, 1673 { 1674 name: 'InSupplemental_Punctuation', 1675 bmp: '\u2E00-\u2E7F' 1676 }, 1677 { 1678 name: 'InSupplemental_Symbols_and_Pictographs', 1679 astral: '\uD83E[\uDD00-\uDDFF]' 1680 }, 1681 { 1682 name: 'InSupplementary_Private_Use_Area_A', 1683 astral: '[\uDB80-\uDBBF][\uDC00-\uDFFF]' 1684 }, 1685 { 1686 name: 'InSupplementary_Private_Use_Area_B', 1687 astral: '[\uDBC0-\uDBFF][\uDC00-\uDFFF]' 1688 }, 1689 { 1690 name: 'InSutton_SignWriting', 1691 astral: '\uD836[\uDC00-\uDEAF]' 1692 }, 1693 { 1694 name: 'InSyloti_Nagri', 1695 bmp: '\uA800-\uA82F' 1696 }, 1697 { 1698 name: 'InSyriac', 1699 bmp: '\u0700-\u074F' 1700 }, 1701 { 1702 name: 'InTagalog', 1703 bmp: '\u1700-\u171F'
1704 }, 1705 { 1706 name: 'InTagbanwa', 1707 bmp: '\u1760-\u177F' 1708 }, 1709 { 1710 name: 'InTags', 1711 astral: '\uDB40[\uDC00-\uDC7F]' 1712 }, 1713 { 1714 name: 'InTai_Le', 1715 bmp: '\u1950-\u197F' 1716 }, 1717 { 1718 name: 'InTai_Tham', 1719 bmp: '\u1A20-\u1AAF' 1720 }, 1721 { 1722 name: 'InTai_Viet', 1723 bmp: '\uAA80-\uAADF' 1724 }, 1725 { 1726 name: 'InTai_Xuan_Jing_Symbols', 1727 astral: '\uD834[\uDF00-\uDF5F]' 1728 }, 1729 { 1730 name: 'InTakri', 1731 astral: '\uD805[\uDE80-\uDECF]' 1732 }, 1733 { 1734 name: 'InTamil', 1735 bmp: '\u0B80-\u0BFF' 1736 }, 1737 { 1738 name: 'InTangut', 1739 astral: '[\uD81C-\uD821][\uDC00-\uDFFF]' 1740 }, 1741 { 1742 name: 'InTangut_Components', 1743 astral: '\uD822[\uDC00-\uDEFF]' 1744 }, 1745 { 1746 name: 'InTelugu', 1747 bmp: '\u0C00-\u0C7F' 1748 }, 1749 { 1750 name: 'InThaana', 1751 bmp: '\u0780-\u07BF' 1752 }, 1753 { 1754 name: 'InThai', 1755 bmp: '\u0E00-\u0E7F' 1756 }, 1757 { 1758 name: 'InTibetan', 1759 bmp: '\u0F00-\u0FFF' 1760 }, 1761 { 1762 name: 'InTifinagh', 1763 bmp: '\u2D30-\u2D7F' 1764 }, 1765 { 1766 name: 'InTirhuta', 1767 astral: '\uD805[\uDC80-\uDCDF]' 1768 }, 1769 { 1770 name: 'InTransport_and_Map_Symbols', 1771 astral: '\uD83D[\uDE80-\uDEFF]' 1772 }, 1773 { 1774 name: 'InUgaritic', 1775 astral: '\uD800[\uDF80-\uDF9F]' 1776 }, 1777 { 1778 name: 'InUnified_Canadian_Aboriginal_Syllabics', 1779 bmp: '\u1400-\u167F' 1780 }, 1781 { 1782 name: 'InUnified_Canadian_Aboriginal_Syllabics_Extended', 1783 bmp: '\u18B0-\u18FF' 1784 }, 1785 { 1786 name: 'InVai', 1787 bmp: '\uA500-\uA63F' 1788 }, 1789 { 1790 name: 'InVariation_Selectors', 1791 bmp: '\uFE00-\uFE0F' 1792 }, 1793 { 1794 name: 'InVariation_Selectors_Supplement', 1795 astral: '\uDB40[\uDD00-\uDDEF]' 1796 }, 1797 { 1798 name: 'InVedic_Extensions', 1799 bmp: '\u1CD0-\u1CFF' 1800 }, 1801 { 1802 name: 'InVertical_Forms', 1803 bmp: '\uFE10-\uFE1F' 1804 }, 1805 { 1806 name: 'InWarang_Citi', 1807 astral: '\uD806[\uDCA0-\uDCFF]' 1808 }, 1809 { 1810 name: 'InYi_Radicals', 1811 bmp: '\uA490-\uA4CF' 1812 }, 1813 { 1814 name: 'InYi_Syllables', 1815 bmp: '\uA000-\uA48F' 1816 }, 1817 { 1818 name: 'InYijing_Hexagram_Symbols', 1819 bmp: '\u4DC0-\u4DFF' 1820 } 1821 ]); 1822 1823 }; 1824 1825 }, {}
1825], 5: [function (require, module, exports) { 1826 /*! 1827 * XRegExp Unicode Categories 3.2.0 1828 * <xregexp.com> 1829 * Steven Levithan (c) 2010-2017 MIT License 1830 * Unicode data by Mathias Bynens <mathiasbynens.be> 1831 */ 1832 1833 module.exports = function (XRegExp) { 1834 'use strict'; 1835 1836 /** 1837 * Adds support for Unicode's general categories. E.g., `\p{Lu}` or `\p{Uppercase Letter}`. See 1838 * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token 1839 * names are case insensitive, and any spaces, hyphens, and underscores are ignored. 1840 * 1841 * Uses Unicode 9.0.0. 1842 * 1843 * @requires XRegExp, Unicode Base 1844 */ 1845 1846 if (!XRegExp.addUnicodeData) { 1847 throw new ReferenceError('Unicode Base must be loaded before Unicode Categories'); 1848 } 1849 1850 XRegExp.addUnicodeData([ 1851 { 1852 name: 'C', 1853 alias: 'Other', 1854 isBmpLast: true, 1855 bmp: '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5\u08BE-\u08D3\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D
18557E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E45-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', 1856 astral: '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5E-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE1-\uDFFF]|\uD821[\uDFED-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD83D[\uDED3-\uDEDF\uDEED-\uDEEF\uDEF7-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD1F\uDD28-\uDD2F\uDD31\uDD32\uDD3F\uDD4C-\uDD4F\uDD5F-\uDD7F\uDD92-\uDDBF\uDDC1-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' 1857 }, 1858 { 1859 name: 'Cc', 1860 alias: 'Control', 1861 bmp: '\0-\x1F\x7F-\x9F' 1862 }, 1863 { 1864 name: 'Cf', 1865 alias: 'Format', 1866 bmp: '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', 1867 astral: '\uD804\uDCBD|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' 1868 }, 1869 { 1870 name: 'Cn', 1871 alias: 'Unassigned', 1872 bmp: '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5\u08BE-\u08D3\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u
18720A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E45-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', 1873 astral: '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5E-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE1-\uDFFF]|\uD821[\uDFED-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD83D[\uDED3-\uDEDF\uDEED-\uDEEF\uDEF7-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD1F\uDD28-\uDD2F\uDD31\uDD32\uDD3F\uDD4C-\uDD4F\uDD5F-\uDD7F\uDD92-\uDDBF\uDDC1-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' 1874 }, 1875 { 1876 name: 'Co', 1877 alias: 'Private_Use', 1878 bmp: '\uE000-\uF8FF', 1879 astral: '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' 1880 }, 1881 { 1882 name: 'Cs', 1883 alias: 'Surrogate', 1884 bmp: '\uD800-\uDFFF' 1885 }, 1886 { 1887 name: 'L', 1888 alias: 'Letter', 1889 bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u
18890EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', 1890 astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' 1891 }, 1892 { 1893 name: 'Ll', 1894 alias: 'Lowercase_Letter', 1895 bmp: 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01D
1895D\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', 1896 astral: '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' 1897 }, 1898 { 1899 name: 'Lm', 1900 alias: 'Modifier_Letter', 1901 bmp: '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E\uFF9F', 1902 astral: '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0]' 1903 }, 1904 { 1905 name: 'Lo', 1906 alias: 'Other_Letter', 1907 bmp: '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u
19070EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', 1908 astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' 1909 }, 1910 { 1911 name: 'Lt', 1912 alias: 'Titlecase_Letter', 1913 bmp: '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' 1914 }, 1915 { 1916 name: 'Lu', 1917 alias: 'Uppercase_Letter', 1918 bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u01
191878\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A', 1919 astral: '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' 1920 }, 1921 { 1922 name: 'M', 1923 alias: 'Mark',
1924 bmp: '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', 1925 astral: '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDCA-\uDDCC\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' 1926 }, 1927 { 1928 name: 'Mc', 1929 alias: 'Spacing_Mark', 1930 bmp: '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF2\u1CF3\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', 1931 astral: '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4]|\uD81B[\uDF51-\uDF7E]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' 1932 }, 1933 { 1934 name: 'Me', 1935 alias: 'Enclosing_Mark', 1936 bmp: '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' 1937 }, 1938 { 1939 name: 'Mn', 1940 alias: 'Nonspacing_Mark', 1941 bmp: '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u
1941094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D01\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', 1942 astral: '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDCA-\uDDCC\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' 1943 }, 1944 { 1945 name: 'N', 1946 alias: 'Number', 1947 bmp: '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', 1948 astral: '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58
1948-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2]|\uD807[\uDC50-\uDC6C]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD834[\uDF60-\uDF71]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83C[\uDD00-\uDD0C]' 1949 }, 1950 { 1951 name: 'Nd', 1952 alias: 'Decimal_Number', 1953 bmp: '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', 1954 astral: '\uD801[\uDCA0-\uDCA9]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9]|\uD807[\uDC50-\uDC59]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDD50-\uDD59]' 1955 }, 1956 { 1957 name: 'Nl', 1958 alias: 'Letter_Number', 1959 bmp: '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', 1960 astral: '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' 1961 }, 1962 { 1963 name: 'No', 1964 alias: 'Other_Number', 1965 bmp: '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', 1966 astral: '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C]|\uD81A[\uDF5B-\uDF61]|\uD834[\uDF60-\uDF71]|\uD83A[\uDCC7-\uDCCF]|\uD83C[\uDD00-\uDD0C]' 1967 }, 1968 { 1969 name: 'P', 1970 alias: 'Punctuation', 1971 bmp: '\x21-\x23\x25-\\x2A\x2C-\x2F\x3A\x3B\\x3F\x40\\x5B-\\x5D\x5F\\x7B\x7D\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E44\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', 1972 astral: '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD807[\uDC41-\uDC45\uDC70\uDC71]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' 1973 }, 1974 { 1975 name: 'Pc', 1976 alias: 'Connector_Punctuation', 1977 bmp: '\x5F\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' 1978 }, 1979 { 1980 name: 'Pd', 1981 alias: 'Dash_Punctuation', 1982 bmp: '\\x2D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D' 1983 }, 1984 { 1985 name: 'Pe', 1986 alias: 'Close_Punctuation', 1987 bmp: '\\x29\\x5D\x7D\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' 1988 }, 1989 { 1990 name: 'Pf', 1991 alias: 'Final_Punctuation', 1992 bmp: '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' 1993 }, 1994 { 1995 name: 'Pi', 1996 alias: 'Initial_Punctuation', 1997 bmp: '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' 1998 }, 1999 { 2000 name: 'Po', 2001 alias: 'Other_Punctuation', 2002 bmp: '\x21-\x23\x25-\x27\\x2A\x2C\\x2E\x2F\x3A\x3B\\x3F\x40\\x5C\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166D\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43\u2E44\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', 2003 astral: '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD807[\uDC41-\uDC45\uDC70\uDC71]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' 2004 }, 2005 { 2006 name: 'Ps', 2007 alias: 'Open_Punctuation', 2008 bmp: '\\x28\\x5B\\x7B\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' 2009 }, 2010 { 2011 name: 'S', 2012 alias: 'Symbol', 2013 bmp: '\\x24\\x2B\x3C-\x3E\\x5E\x60\\x7C\x7E\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\x
2013F7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BE\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u23FE\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', 2014 astral: '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83B[\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]' 2015 }, 2016 { 2017 name: 'Sc', 2018 alias: 'Currency_Symbol', 2019 bmp: '\\x24\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BE\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6' 2020 }, 2021 { 2022 name: 'Sk', 2023 alias: 'Modifier_Symbol', 2024 bmp: '\\x5E\x60\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', 2025 astral: '\uD83C[\uDFFB-\uDFFF]' 2026 }, 2027 { 2028 name: 'Sm', 2029 alias: 'Math_Symbol', 2030 bmp: '\\x2B\x3C-\x3E\\x7C\x7E\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', 2031 astral: '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' 2032 }, 2033 { 2034 name: 'So', 2035 alias: 'Other_Symbol', 2036 bmp: '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u
20360FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u23FE\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', 2037 astral: '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]' 2038 }, 2039 { 2040 name: 'Z', 2041 alias: 'Separator', 2042 bmp: '\x20\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' 2043 }, 2044 { 2045 name: 'Zl', 2046 alias: 'Line_Separator', 2047 bmp: '\u2028' 2048 }, 2049 { 2050 name: 'Zp', 2051 alias: 'Paragraph_Separator', 2052 bmp: '\u2029' 2053 }, 2054 { 2055 name: 'Zs', 2056 alias: 'Space_Separator', 2057 bmp: '\x20\xA0\u1680\u2000-\u200A\u202F\u205F\u3000' 2058 } 2059 ]); 2060 2061 }; 2062 2063 }, {}], 6: [function (require, module, exports) { 2064 /*! 2065 * XRegExp Unicode Properties 3.2.0 2066 * <xregexp.com> 2067 * Steven Levithan (c) 2012-2017 MIT License 2068 * Unicode data by Mathias Bynens <mathiasbynens.be> 2069 */ 2070 2071 module.exports = function (XRegExp) { 2072 'use strict'; 2073 2074 /** 2075 * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See 2076 * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from 2077 * UAX #44 <http://unicode.org/reports/tr44/>: 2078 * 2079 * - Alphabetic 2080 * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + 2081 * Lo + Nl + Other_Alphabetic. 2082 * 2083 * - Default_Ignorable_Code_Point 2084 * For programmatic determination of default ignorable code points. New characters that should 2085 * be ignored in rendering (unless explicitly supported) will be assigned in these ranges, 2086 * permitting programs to correctly handle the default rendering of such characters when not 2087 * otherwise supported. 2088 * 2089 * - Lowercase 2090 * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase. 2091 * 2092 * - Noncharacter_Code_Point 2093 * Code points permanently reserved for internal use. 2094 * 2095 * - Uppercase 2096 * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase. 2097 * 2098 * - White_Space 2099 * Spaces, separator characters and other control characters which should be treated by 2100 * programming languages as "white space" for the purpose of parsing elements. 2101 * 2102 * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS 2103 * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are 2104 * included in XRegExp's Unicode Categories and Unicode Scripts add
2104ons. 2105 * 2106 * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored. 2107 * 2108 * Uses Unicode 9.0.0. 2109 * 2110 * @requires XRegExp, Unicode Base 2111 */ 2112 2113 if (!XRegExp.addUnicodeData) { 2114 throw new ReferenceError('Unicode Base must be loaded before Unicode Properties'); 2115 } 2116 2117 var unicodeData = [ 2118 { 2119 name: 'ASCII', 2120 bmp: '\0-\x7F' 2121 }, 2122 { 2123 name: 'Alphabetic', 2124 bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u1062\u1065-\u1068\u106E-\u1086\u108E\u109C\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4B\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C35\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A\uAA7E-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFB
2124D3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', 2125 astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC45\uDC82-\uDCB8\uDCD0-\uDCE8\uDD00-\uDD32\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDF00-\uDF19\uDF1D-\uDF2A]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF36\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' 2126 }, 2127 { 2128 name: 'Any', 2129 isBmpLast: true, 2130 bmp: '\0-\uFFFF', 2131 astral: '[\uD800-\uDBFF][\uDC00-\uDFFF]' 2132 }, 2133 { 2134 name: 'Default_Ignorable_Code_Point', 2135 bmp: '\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8', 2136 astral: '\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]' 2137 }, 2138 { 2139 name: 'Lowercase', 2140 bmp: 'a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01D
2140D\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', 2141 astral: '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' 2142 }, 2143 { 2144 name: 'Noncharacter_Code_Point', 2145 bmp: '\uFDD0-\uFDEF\uFFFE\uFFFF', 2146 astral: '[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7
2146F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]' 2147 }, 2148 { 2149 name: 'Uppercase', 2150 bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A', 2151 astral: '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]' 2152 }, 2153 { 2154 name: 'White_Space', 2155 bmp: '\x09-\x0D\x20\x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' 2156 } 2157 ]; 2158 2159 // Add non-generated data 2160 unicodeData.push({ 2161 name: 'Assigned', 2162 // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode 2163 // Categories addon is required to use this property 2164 inverseOf: 'Cn' 2165 }); 2166 2167 XRegExp.addUnicodeData(unicodeData); 2168 2169 }; 2170 2171 }, {}
2171], 7: [function (require, module, exports) { 2172 /*! 2173 * XRegExp Unicode Scripts 3.2.0 2174 * <xregexp.com> 2175 * Steven Levithan (c) 2010-2017 MIT License 2176 * Unicode data by Mathias Bynens <mathiasbynens.be> 2177 */ 2178 2179 module.exports = function (XRegExp) { 2180 'use strict'; 2181 2182 /** 2183 * Adds support for all Unicode scripts. E.g., `\p{Latin}`. Token names are case insensitive, 2184 * and any spaces, hyphens, and underscores are ignored. 2185 * 2186 * Uses Unicode 9.0.0. 2187 * 2188 * @requires XRegExp, Unicode Base 2189 */ 2190 2191 if (!XRegExp.addUnicodeData) { 2192 throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts'); 2193 } 2194 2195 XRegExp.addUnicodeData([ 2196 { 2197 name: 'Adlam', 2198 astral: '\uD83A[\uDD00-\uDD4A\uDD50-\uDD59\uDD5E\uDD5F]' 2199 }, 2200 { 2201 name: 'Ahom', 2202 astral: '\uD805[\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF3F]' 2203 }, 2204 { 2205 name: 'Anatolian_Hieroglyphs', 2206 astral: '\uD811[\uDC00-\uDE46]' 2207 }, 2208 { 2209 name: 'Arabic', 2210 bmp: '\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u08FF\uFB50-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE70-\uFE74\uFE76-\uFEFC', 2211 astral: '\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]' 2212 }, 2213 { 2214 name: 'Armenian', 2215 bmp: '\u0531-\u0556\u0559-\u055F\u0561-\u0587\u058A\u058D-\u058F\uFB13-\uFB17' 2216 }, 2217 { 2218 name: 'Avestan', 2219 astral: '\uD802[\uDF00-\uDF35\uDF39-\uDF3F]' 2220 }, 2221 { 2222 name: 'Balinese', 2223 bmp: '\u1B00-\u1B4B\u1B50-\u1B7C' 2224 }, 2225 { 2226 name: 'Bamum', 2227 bmp: '\uA6A0-\uA6F7', 2228 astral: '\uD81A[\uDC00-\uDE38]' 2229 }, 2230 { 2231 name: 'Bassa_Vah', 2232 astral: '\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]' 2233 }, 2234 { 2235 name: 'Batak', 2236 bmp: '\u1BC0-\u1BF3\u1BFC-\u1BFF' 2237 }, 2238 { 2239 name: 'Bengali', 2240 bmp: '\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FB' 2241 }, 2242 { 2243 name: 'Bhaiksuki', 2244 astral: '\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]' 2245 }, 2246 { 2247 name: 'Bopomofo', 2248 bmp: '\u02EA\u02EB\u3105-\u312D\u31A0-\u31BA' 2249 }, 2250 { 2251 name: 'Brahmi', 2252 astral: '\uD804[\uDC00-\uDC4D\uDC52-\uDC6F\uDC7F]' 2253 }, 2254 { 2255 name: 'Braille', 2256 bmp: '\u2800-\u28FF' 2257 }, 2258 { 2259 name: 'Buginese', 2260 bmp: '\u1A00-\u1A1B\u1A1E\u1A1F' 2261 }, 2262 { 2263 name: 'Buhid', 2264 bmp: '\u1740-\u1753' 2265 }, 2266 { 2267 name: 'Canadian_Aboriginal', 2268 bmp: '\u1400-\u167F\u18B0-\u18F5' 2269 }, 2270 { 2271 name: 'Carian', 2272 astral: '\uD800[\uDEA0-\uDED0]' 2273 }, 2274 { 2275 name: 'Caucasian_Albanian', 2276 astral: '\uD801[\uDD30-\uDD63\uDD6F]' 2277 }, 2278 { 2279 name: 'Chakma', 2280 astral: '\uD804[\uDD00-\uDD34\uDD36-\uDD43]' 2281 }, 2282 { 2283 name: 'Cham', 2284 bmp: '\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F' 2285 }, 2286 { 2287 name: 'Cherokee', 2288 bmp: '\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF' 2289 }, 2290 { 2291 name: 'Common', 2292 bmp: '\0-\x40\\x5B-\x60\\x7B-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0589\u0605\u060C\u061B\u061C\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BE\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u23FE\u2400-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2E00-\u2E44\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD', 2293 astral: '\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9B\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDF00-\uDF56\uDF60-\uDF71]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDD0C\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDDAC\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED2\uDEE0-\uDEEC\uDEF0-\uDEF6\uDF00-\uDF73\uDF80-\uDFD4]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3E\uDD40-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]|\uDB40[\uDC01\uDC20-\uDC7F]' 2294 }, 2295 { 2296 name: 'Coptic', 2297 bmp: '\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF' 2298 }, 2299 { 2300 name: 'Cuneiform', 2301 astral: '\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]' 2302 }, 2303 { 2304 name: 'Cypriot', 2305 astral: '\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]'
2306 }, 2307 { 2308 name: 'Cyrillic', 2309 bmp: '\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F' 2310 }, 2311 { 2312 name: 'Deseret', 2313 astral: '\uD801[\uDC00-\uDC4F]' 2314 }, 2315 { 2316 name: 'Devanagari', 2317 bmp: '\u0900-\u0950\u0953-\u0963\u0966-\u097F\uA8E0-\uA8FD' 2318 }, 2319 { 2320 name: 'Duployan', 2321 astral: '\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]' 2322 }, 2323 { 2324 name: 'Egyptian_Hieroglyphs', 2325 astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]' 2326 }, 2327 { 2328 name: 'Elbasan', 2329 astral: '\uD801[\uDD00-\uDD27]' 2330 }, 2331 { 2332 name: 'Ethiopic', 2333 bmp: '\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E' 2334 }, 2335 { 2336 name: 'Georgian', 2337 bmp: '\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u2D00-\u2D25\u2D27\u2D2D' 2338 }, 2339 { 2340 name: 'Glagolitic', 2341 bmp: '\u2C00-\u2C2E\u2C30-\u2C5E', 2342 astral: '\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]' 2343 }, 2344 { 2345 name: 'Gothic', 2346 astral: '\uD800[\uDF30-\uDF4A]' 2347 }, 2348 { 2349 name: 'Grantha', 2350 astral: '\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]' 2351 }, 2352 { 2353 name: 'Greek', 2354 bmp: '\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\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', 2355 astral: '\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]' 2356 }, 2357 { 2358 name: 'Gujarati', 2359 bmp: '\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9' 2360 }, 2361 { 2362 name: 'Gurmukhi', 2363 bmp: '\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75' 2364 }, 2365 { 2366 name: 'Han', 2367 bmp: '\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FD5\uF900-\uFA6D\uFA70-\uFAD9', 2368 astral: '[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]' 2369 }, 2370 { 2371 name: 'Hangul', 2372 bmp: '\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' 2373 }, 2374 { 2375 name: 'Hanunoo', 2376 bmp: '\u1720-\u1734' 2377 }, 2378 { 2379 name: 'Hatran', 2380 astral: '\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]' 2381 }, 2382 { 2383 name: 'Hebrew', 2384 bmp: '\u0591-\u05C7\u05D0-\u05EA\u05F0-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F' 2385 }, 2386 { 2387 name: 'Hiragana', 2388 bmp: '\u3041-\u3096\u309D-\u309F', 2389 astral: '\uD82C\uDC01|\uD83C\uDE00' 2390 }, 2391 { 2392 name: 'Imperial_Aramaic', 2393 astral: '\uD802[\uDC40-\uDC55\uDC57-\uDC
23935F]' 2394 }, 2395 { 2396 name: 'Inherited', 2397 bmp: '\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951\u0952\u1AB0-\u1ABE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D', 2398 astral: '\uD800[\uDDFD\uDEE0]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]' 2399 }, 2400 { 2401 name: 'Inscriptional_Pahlavi', 2402 astral: '\uD802[\uDF60-\uDF72\uDF78-\uDF7F]' 2403 }, 2404 { 2405 name: 'Inscriptional_Parthian', 2406 astral: '\uD802[\uDF40-\uDF55\uDF58-\uDF5F]' 2407 }, 2408 { 2409 name: 'Javanese', 2410 bmp: '\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF' 2411 }, 2412 { 2413 name: 'Kaithi', 2414 astral: '\uD804[\uDC80-\uDCC1]' 2415 }, 2416 { 2417 name: 'Kannada', 2418 bmp: '\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2' 2419 }, 2420 { 2421 name: 'Katakana', 2422 bmp: '\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D', 2423 astral: '\uD82C\uDC00' 2424 }, 2425 { 2426 name: 'Kayah_Li', 2427 bmp: '\uA900-\uA92D\uA92F' 2428 }, 2429 { 2430 name: 'Kharoshthi', 2431 astral: '\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F-\uDE47\uDE50-\uDE58]' 2432 }, 2433 { 2434 name: 'Khmer', 2435 bmp: '\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF' 2436 }, 2437 { 2438 name: 'Khojki', 2439 astral: '\uD804[\uDE00-\uDE11\uDE13-\uDE3E]' 2440 }, 2441 { 2442 name: 'Khudawadi', 2443 astral: '\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]' 2444 }, 2445 { 2446 name: 'Lao', 2447 bmp: '\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF' 2448 }, 2449 { 2450 name: 'Latin', 2451 bmp: 'A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A' 2452 }, 2453 { 2454 name: 'Lepcha', 2455 bmp: '\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F' 2456 }, 2457 { 2458 name: 'Limbu', 2459 bmp: '\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F' 2460 }, 2461 { 2462 name: 'Linear_A', 2463 astral: '\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]' 2464 }, 2465 { 2466 name: 'Linear_B', 2467 astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]' 2468 }, 2469 { 2470 name: 'Lisu', 2471 bmp: '\uA4D0-\uA4FF' 2472 }, 2473 { 2474 name: 'Lycian', 2475 astral: '\uD800[\uDE80-\uDE9C]' 2476 }, 2477 { 2478 name: 'Lydian', 2479 astral: '\uD802[\uDD20-\uDD39\uDD3F]' 2480 }, 2481 { 2482 name: 'Mahajani', 2483 astral: '\uD804[\uDD50-\uDD76]' 2484 }, 2485 { 2486 name: 'Malayalam', 2487 bmp: '\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F' 2488 }, 2489 { 2490 name: 'Mandaic', 2491 bmp: '\u0840-\u085B\u085E' 2492 }, 2493 { 2494 name: 'Manichaean', 2495 astral: '\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]' 2496 }, 2497 { 2498 name: 'Marchen', 2499 astral: '\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]' 2500 }, 2501 { 2502 name: 'Meetei_Mayek', 2503 bmp: '\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9' 2504 }, 2505 { 2506 name: 'Mende_Kikakui', 2507 astral: '\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]' 2508 }, 2509 { 2510 name: 'Meroitic_Cursive', 2511 astral: '\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]' 2512 }, 2513 { 2514 name: 'Meroitic_Hieroglyphs', 2515 astral: '\uD802[\uDD80-\uDD9F]' 2516 }, 2517 { 2518 name: 'Miao', 2519 astral: '\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]' 2520 }, 2521 { 2522 name: 'Modi', 2523 astral: '\uD805[\uDE00-\uDE44\uDE50-\uDE59]' 2524 }, 2525 { 2526 name: 'Mongolian', 2527 bmp: '\u1800\u1801\u1804\u1806-\u180E\u1810-\u1819\u1820-\u1877\u1880-\u18AA', 2528 astral: '\uD805[\uDE60-\uDE6C]' 2529 }, 2530 { 2531 name: 'Mro', 2532 astral: '\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]' 2533 }, 2534 { 2535 name: 'Multani', 2536 astral: '\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]' 2537 }, 2538 { 2539 name: 'Myanmar', 2540 bmp: '\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F' 2541 }, 2542 { 2543 name: 'Nabataean', 2544 astral: '\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]' 2545 }, 2546 { 2547 name: 'New_Tai_Lue', 2548 bmp: '\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF' 2549 }, 2550 { 2551 name: 'Newa', 2552 astral: '\uD805[\uDC00-\uDC59\uDC5B\uDC5D]' 2553 }, 2554 { 2555 name: 'Nko', 2556 bmp: '\u07C0-\u07FA' 2557 }, 2558 { 2559 name: 'Ogham', 2560 bmp: '\u1680-\u169C' 2561 }, 2562 {
2563 name: 'Ol_Chiki', 2564 bmp: '\u1C50-\u1C7F' 2565 }, 2566 { 2567 name: 'Old_Hungarian', 2568 astral: '\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]' 2569 }, 2570 { 2571 name: 'Old_Italic', 2572 astral: '\uD800[\uDF00-\uDF23]' 2573 }, 2574 { 2575 name: 'Old_North_Arabian', 2576 astral: '\uD802[\uDE80-\uDE9F]' 2577 }, 2578 { 2579 name: 'Old_Permic', 2580 astral: '\uD800[\uDF50-\uDF7A]' 2581 }, 2582 { 2583 name: 'Old_Persian', 2584 astral: '\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]' 2585 }, 2586 { 2587 name: 'Old_South_Arabian', 2588 astral: '\uD802[\uDE60-\uDE7F]' 2589 }, 2590 { 2591 name: 'Old_Turkic', 2592 astral: '\uD803[\uDC00-\uDC48]' 2593 }, 2594 { 2595 name: 'Oriya', 2596 bmp: '\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77' 2597 }, 2598 { 2599 name: 'Osage', 2600 astral: '\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]' 2601 }, 2602 { 2603 name: 'Osmanya', 2604 astral: '\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]' 2605 }, 2606 { 2607 name: 'Pahawh_Hmong', 2608 astral: '\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]' 2609 }, 2610 { 2611 name: 'Palmyrene', 2612 astral: '\uD802[\uDC60-\uDC7F]' 2613 }, 2614 { 2615 name: 'Pau_Cin_Hau', 2616 astral: '\uD806[\uDEC0-\uDEF8]' 2617 }, 2618 { 2619 name: 'Phags_Pa', 2620 bmp: '\uA840-\uA877' 2621 }, 2622 { 2623 name: 'Phoenician', 2624 astral: '\uD802[\uDD00-\uDD1B\uDD1F]' 2625 }, 2626 { 2627 name: 'Psalter_Pahlavi', 2628 astral: '\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]' 2629 }, 2630 { 2631 name: 'Rejang', 2632 bmp: '\uA930-\uA953\uA95F' 2633 }, 2634 { 2635 name: 'Runic', 2636 bmp: '\u16A0-\u16EA\u16EE-\u16F8' 2637 }, 2638 { 2639 name: 'Samaritan', 2640 bmp: '\u0800-\u082D\u0830-\u083E' 2641 }, 2642 { 2643 name: 'Saurashtra', 2644 bmp: '\uA880-\uA8C5\uA8CE-\uA8D9' 2645 }, 2646 { 2647 name: 'Sharada', 2648 astral: '\uD804[\uDD80-\uDDCD\uDDD0-\uDDDF]' 2649 }, 2650 { 2651 name: 'Shavian', 2652 astral: '\uD801[\uDC50-\uDC7F]' 2653 }, 2654 { 2655 name: 'Siddham', 2656 astral: '\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]' 2657 }, 2658 { 2659 name: 'SignWriting', 2660 astral: '\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]' 2661 }, 2662 { 2663 name: 'Sinhala', 2664 bmp: '\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4', 2665 astral: '\uD804[\uDDE1-\uDDF4]' 2666 }, 2667 { 2668 name: 'Sora_Sompeng', 2669 astral: '\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]' 2670 }, 2671 { 2672 name: 'Sundanese', 2673 bmp: '\u1B80-\u1BBF\u1CC0-\u1CC7' 2674 }, 2675 { 2676 name: 'Syloti_Nagri', 2677 bmp: '\uA800-\uA82B' 2678 }, 2679 { 2680 name: 'Syriac', 2681 bmp: '\u0700-\u070D\u070F-\u074A\u074D-\u074F' 2682 }, 2683 { 2684 name: 'Tagalog', 2685 bmp: '\u1700-\u170C\u170E-\u1714' 2686 }, 2687 { 2688 name: 'Tagbanwa', 2689 bmp: '\u1760-\u176C\u176E-\u1770\u1772\u1773' 2690 }, 2691 { 2692 name: 'Tai_Le', 2693 bmp: '\u1950-\u196D\u1970-\u1974' 2694 }, 2695 { 2696 name: 'Tai_Tham', 2697 bmp: '\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD' 2698 }, 2699 { 2700 name: 'Tai_Viet', 2701 bmp: '\uAA80-\uAAC2\uAADB-\uAADF' 2702 }, 2703 { 2704 name: 'Takri', 2705 astral: '\uD805[\uDE80-\uDEB7\uDEC0-\uDEC9]' 2706 }, 2707 { 2708 name: 'Tamil', 2709 bmp: '\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA' 2710 }, 2711 { 2712 name: 'Tangut', 2713 astral: '\uD81B\uDFE0|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]' 2714 }, 2715 { 2716 name: 'Telugu', 2717 bmp: '\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7F' 2718 }, 2719 { 2720 name: 'Thaana', 2721 bmp: '\u0780-\u07B1' 2722 }, 2723 { 2724 name: 'Thai', 2725 bmp: '\u0E01-\u0E3A\u0E40-\u0E5B' 2726 }, 2727 { 2728 name: 'Tibetan', 2729 bmp: '\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA' 2730 }, 2731 { 2732 name: 'Tifinagh', 2733 bmp: '\u2D30-\u2D67\u2D6F\u2D70\u2D7F' 2734 }, 2735 { 2736 name: 'Tirhuta', 2737 astral: '\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]' 2738 }, 2739 { 2740 name: 'Ugaritic', 2741 astral: '\uD800[\uDF80-\uDF9D\uDF9F]' 2742 }, 2743 { 2744 name: 'Vai', 2745 bmp: '\uA500-\uA62B' 2746 }, 2747 { 2748 name: 'Warang_Citi', 2749 astral: '\uD806[\uDCA0-\uDCF2\uDCFF]' 2750 }, 2751 { 2752 name: 'Yi', 2753 bmp: '\uA000-\uA48C\uA490-\uA4C6' 2754 } 2755 ]); 2756 2757 }; 2758 2759 }, {}
2759], 8: [function (require, module, exports) { 2760 var XRegExp = require('./xregexp'); 2761 2762 require('./addons/build')(XRegExp); 2763 require('./addons/matchrecursive')(XRegExp); 2764 require('./addons/unicode-base')(XRegExp); 2765 require('./addons/unicode-blocks')(XRegExp); 2766 require('./addons/unicode-categories')(XRegExp); 2767 require('./addons/unicode-properties')(XRegExp); 2768 require('./addons/unicode-scripts')(XRegExp); 2769 2770 module.exports = XRegExp; 2771 2772 }, {"./addons/build": 1, "./addons/matchrecursive": 2, "./addons/unicode-base": 3, "./addons/unicode-blocks": 4, "./addons/unicode-categories": 5, "./addons/unicode-properties": 6, "./addons/unicode-scripts": 7, "./xregexp": 9}], 9: [function (require, module, exports) { 2773 /*! 2774 * XRegExp 3.2.0 2775 * <xregexp.com> 2776 * Steven Levithan (c) 2007-2017 MIT License 2777 */ 2778 2779 'use strict'; 2780 2781 /** 2782 * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and 2783 * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to 2784 * make your client-side grepping simpler and more powerful, while freeing you from related 2785 * cross-browser inconsistencies. 2786 */ 2787 2788// ==--------------------------== 2789// Private stuff 2790// ==--------------------------== 2791 2792// Property name used for extended regex instance data 2793 var REGEX_DATA = 'xregexp'; 2794// Optional features that can be installed and uninstalled 2795 var features = { 2796 astral: false, 2797 natives: false 2798 }; 2799// Native methods to use and restore ('native' is an ES3 reserved keyword) 2800 var nativ = { 2801 exec: RegExp.prototype.exec, 2802 test: RegExp.prototype.test, 2803 match: String.prototype.match, 2804 replace: String.prototype.replace, 2805 split: String.prototype.split 2806 }; 2807// Storage for fixed/extended native methods 2808 var fixed = {}; 2809// Storage for regexes cached by `XRegExp.cache` 2810 var regexCache = {}; 2811// Storage for pattern details cached by the `XRegExp` constructor 2812 var patternCache = {}; 2813// Storage for regex syntax tokens added internally or by `XRegExp.addToken` 2814 var tokens = []; 2815// Token scopes 2816 var defaultScope = 'default'; 2817 var classScope = 'class'; 2818// Regexes that match native regex syntax, including octals 2819 var nativeTokens = { 2820 // Any native multicharacter token in default scope, or any single character 2821 'default': /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, 2822 // Any native multicharacter token in character class scope, or any single character 2823 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ 2824 }; 2825// Any backreference or dollar-prefixed character in replacement strings 2826 var replacementToken = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g;
vendor: 4,541 bytes, lines 2827-2917
2827// Check for correct `exec` handling of nonparticipating capturing groups 2828 var correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; 2829// Check for ES6 `flags` prop support 2830 var hasFlagsProp = /x/.flags !== undefined; 2831// Shortcut to `Object.prototype.toString` 2832 var toString = {}.toString; 2833 2834 function hasNativeFlag(flag) { 2835 // Can't check based on the presence of properties/getters since browsers might support such 2836 // properties even when they don't support the corresponding flag in regex construction (tested 2837 // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u` 2838 // throws an error) 2839 var isSupported = true; 2840 try { 2841 // Can't use regex literals for testing even in a `try` because regex literals with 2842 // unsupported flags cause a compilation error in IE 2843 new RegExp('', flag); 2844 } catch (exception) { 2845 isSupported = false; 2846 } 2847 return isSupported; 2848 } 2849// Check for ES6 `u` flag support 2850 var hasNativeU = hasNativeFlag('u'); 2851// Check for ES6 `y` flag support 2852 var hasNativeY = hasNativeFlag('y'); 2853// Tracker for known flags, including addon flags 2854 var registeredFlags = { 2855 g: true, 2856 i: true, 2857 m: true, 2858 u: hasNativeU, 2859 y: hasNativeY 2860 }; 2861 2862 /** 2863 * Attaches extended data and `XRegExp.prototype` properties to a regex object. 2864 * 2865 * @private 2866 * @param {RegExp} regex Regex to augment. 2867 * @param {Array} captureNames Array with capture names, or `null`. 2868 * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A. 2869 * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A. 2870 * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal 2871 * operations, and never exposed to users. For internal-only regexes, we can improve perf by 2872 * skipping some operations like attaching `XRegExp.prototype` properties. 2873 * @returns {RegExp} Augmented regex. 2874 */ 2875 function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { 2876 var p; 2877 2878 regex[REGEX_DATA] = { 2879 captureNames: captureNames 2880 }; 2881 2882 if (isInternalOnly) { 2883 return regex; 2884 } 2885 2886 // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value 2887 if (regex.__proto__) { 2888 regex.__proto__ = XRegExp.prototype; 2889 } else { 2890 for (p in XRegExp.prototype) { 2891 // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this 2892 // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype` 2893 // extensions exist on `regex.prototype` anyway 2894 regex[p] = XRegExp.prototype[p]; 2895 } 2896 } 2897 2898 regex[REGEX_DATA].source = xSource; 2899 // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order 2900 regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags; 2901 2902 return regex; 2903 } 2904 2905 /** 2906 * Removes any duplicate characters from the provided string. 2907 * 2908 * @private 2909 * @param {String} str String to remove duplicate characters from. 2910 * @returns {String} String with any duplicate characters removed. 2911 */ 2912 function clipDuplicates(str) { 2913 return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, ''); 2914 } 2915 2916 /** 2917 * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype`
2918 * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing 2919 * flags g and y while copying the regex. 2920 * 2921 * @private 2922 * @param {RegExp} regex Regex to copy. 2923 * @param {Object} [options] Options object with optional properties: 2924 * - `addG` {Boolean} Add flag g while copying the regex. 2925 * - `addY` {Boolean} Add flag y while copying the regex. 2926 * - `removeG` {Boolean} Remove flag g while copying the regex. 2927 * - `removeY` {Boolean} Remove flag y while copying the regex. 2928 * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal 2929 * operations, and never exposed to users. For internal-only regexes, we can improve perf by 2930 * skipping some operations like attaching `XRegExp.prototype` properties. 2931 * - `source` {String} Overrides `<regex>.source`, for special cases. 2932 * @returns {RegExp} Copy of the provided regex, possibly with modified flags. 2933 */ 2934 function copyRegex(regex, options) { 2935 if (!XRegExp.isRegExp(regex)) { 2936 throw new TypeError('Type RegExp expected'); 2937 } 2938 2939 var xData = regex[REGEX_DATA] || {}; 2940 var flags = getNativeFlags(regex); 2941 var flagsToAdd = ''; 2942 var flagsToRemove = ''; 2943 var xregexpSource = null; 2944 var xregexpFlags = null; 2945 2946 options = options || {}; 2947 2948 if (options.removeG) { 2949 flagsToRemove += 'g'; 2950 } 2951 if (options.removeY) { 2952 flagsToRemove += 'y'; 2953 } 2954 if (flagsToRemove) { 2955 flags = nativ.replace.call(flags, new RegExp('[' + flagsToRemove + ']+', 'g'), ''); 2956 } 2957 2958 if (options.addG) { 2959 flagsToAdd += 'g'; 2960 } 2961 if (options.addY) { 2962 flagsToAdd += 'y'; 2963 } 2964 if (flagsToAdd) { 2965 flags = clipDuplicates(flags + flagsToAdd); 2966 } 2967 2968 if (!options.isInternalOnly) { 2969 if (xData.source !== undefined) { 2970 xregexpSource = xData.source; 2971 } 2972 // null or undefined; don't want to add to `flags` if the previous value was null, since 2973 // that indicates we're not tracking original precompilation flags 2974 if (xData.flags != null) { 2975 // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never 2976 // removed for non-internal regexes, so don't need to handle it 2977 xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags; 2978 } 2979 } 2980 2981 // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid 2982 // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and 2983 // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the 2984 // translation to native regex syntax 2985 regex = augment( 2986 new RegExp(options.source || regex.source, flags), 2987 hasNamedCapture(regex) ? xData.captureNames.slice(0) : null, 2988 xregexpSource, 2989 xregexpFlags, 2990 options.isInternalOnly 2991 ); 2992 2993 return regex; 2994 } 2995 2996 /** 2997 * Converts hexadecimal to decimal. 2998 * 2999 * @private 3000 * @param {String} hex 3001 * @returns {Number} 3002 */ 3003 function dec(hex) { 3004 return parseInt(hex, 16); 3005 } 3006 3007 /** 3008 * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an 3009 * inline comment or whitespace with flag x. This is used directly as a token handler function 3010 * passed to `XRegExp.addToken`. 3011 * 3012 * @private 3013 * @param {String} match Match arg of `XRegExp.addToken` handler 3014 * @param {String} scope Scope arg of `XRegExp.addToken` handler 3015 * @param {String} flags Flags arg of `XRegExp.addToken` handler 3016 * @returns {String} Either '' or '(?:)', depending on which is needed in the context of the match. 3017 */ 3018 function getContextualTokenSeparator(match, scope, flags) { 3019 if ( 3020 // No need to separate tokens if at the beginning or end of a group 3021 match.input.charAt(match.index - 1) === '(' || 3022 match.input.charAt(match.index + match[0].length) === ')' || 3023 // Avoid separating tokens when the following token is a quantifier 3024 isPatternNext(match.input, match.index + match[0].length, flags, '[?*+]|{\\d+(?:,\\d*)?}') 3025 ) { 3026 return ''; 3027 } 3028 // Keep tokens separated. This avoids e.g. inadvertedly changing `\1 1` or `\1(?#)1` to `\11`.
vendor: 5,788 bytes, lines 3029-3146
3029 // This also ensures all tokens remain as discrete atoms, e.g. it avoids converting the syntax 3030 // error `(? :` into `(?:`. 3031 return '(?:)'; 3032 } 3033 3034 /** 3035 * Returns native `RegExp` flags used by a regex object. 3036 * 3037 * @private 3038 * @param {RegExp} regex Regex to check. 3039 * @returns {String} Native flags in use. 3040 */ 3041 function getNativeFlags(regex) { 3042 return hasFlagsProp ? 3043 regex.flags : 3044 // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation 3045 // with an empty string) allows this to continue working predictably when 3046 // `XRegExp.proptotype.toString` is overridden 3047 nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1]; 3048 } 3049 3050 /** 3051 * Determines whether a regex has extended instance data used to track capture names. 3052 * 3053 * @private 3054 * @param {RegExp} regex Regex to check. 3055 * @returns {Boolean} Whether the regex uses named capture. 3056 */ 3057 function hasNamedCapture(regex) { 3058 return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames); 3059 } 3060 3061 /** 3062 * Converts decimal to hexadecimal. 3063 * 3064 * @private 3065 * @param {Number|String} dec 3066 * @returns {String} 3067 */ 3068 function hex(dec) { 3069 return parseInt(dec, 10).toString(16); 3070 } 3071 3072 /** 3073 * Returns the first index at which a given value can be found in an array. 3074 * 3075 * @private 3076 * @param {Array} array Array to search. 3077 * @param {*} value Value to locate in the array. 3078 * @returns {Number} Zero-based index at which the item is found, or -1. 3079 */ 3080 function indexOf(array, value) { 3081 var len = array.length; 3082 var i; 3083 3084 for (i = 0; i < len; ++i) { 3085 if (array[i] === value) { 3086 return i; 3087 } 3088 } 3089 3090 return -1; 3091 } 3092 3093 /** 3094 * Checks whether the next nonignorable token after the specified position matches the 3095 * `needlePattern` 3096 * 3097 * @private 3098 * @param {String} pattern Pattern to search within. 3099 * @param {Number} pos Index in `pattern` to search at. 3100 * @param {String} flags Flags used by the pattern. 3101 * @param {String} needlePattern Pattern to match the next token against. 3102 * @returns {Boolean} Whether the next nonignorable token matches `needlePattern` 3103 */ 3104 function isPatternNext(pattern, pos, flags, needlePattern) { 3105 var inlineCommentPattern = '\\(\\?#[^)]*\\)'; 3106 var lineCommentPattern = '#[^#\\n]*'; 3107 var patternsToIgnore = flags.indexOf('x') > -1 ? 3108 // Ignore any leading whitespace, line comments, and inline comments 3109 ['\\s', lineCommentPattern, inlineCommentPattern] : 3110 // Ignore any leading inline comments 3111 [inlineCommentPattern]; 3112 return nativ.test.call( 3113 new RegExp('^(?:' + patternsToIgnore.join('|') + ')*(?:' + needlePattern + ')'), 3114 pattern.slice(pos) 3115 ); 3116 } 3117 3118 /** 3119 * Determines whether a value is of the specified type, by resolving its internal [[Class]]. 3120 * 3121 * @private 3122 * @param {*} value Object to check. 3123 * @param {String} type Type to check for, in TitleCase. 3124 * @returns {Boolean} Whether the object matches the type. 3125 */ 3126 function isType(value, type) { 3127 return toString.call(value) === '[object ' + type + ']'; 3128 } 3129 3130 /** 3131 * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values. 3132 * 3133 * @private 3134 * @param {String} str 3135 * @returns {String} 3136 */ 3137 function pad4(str) { 3138 while (str.length < 4) { 3139 str = '0' + str; 3140 } 3141 return str; 3142 } 3143 3144 /** 3145 * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads 3146 * the flag preparation logic from the `XReg
3146Exp` constructor. 3147 * 3148 * @private 3149 * @param {String} pattern Regex pattern, possibly with a leading mode modifier. 3150 * @param {String} flags Any combination of flags. 3151 * @returns {Object} Object with properties `pattern` and `flags`. 3152 */ 3153 function prepareFlags(pattern, flags) { 3154 var i; 3155 3156 // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags 3157 if (clipDuplicates(flags) !== flags) { 3158 throw new SyntaxError('Invalid duplicate regex flag ' + flags); 3159 } 3160 3161 // Strip and apply a leading mode modifier with any combination of flags except g or y 3162 pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function ($0, $1) { 3163 if (nativ.test.call(/[gy]/, $1)) { 3164 throw new SyntaxError('Cannot use flag g or y in mode modifier ' + $0); 3165 } 3166 // Allow duplicate flags within the mode modifier 3167 flags = clipDuplicates(flags + $1); 3168 return ''; 3169 }); 3170 3171 // Throw on unknown native or nonnative flags 3172 for (i = 0; i < flags.length; ++i) { 3173 if (!registeredFlags[flags.charAt(i)]) { 3174 throw new SyntaxError('Unknown regex flag ' + flags.charAt(i)); 3175 } 3176 } 3177 3178 return { 3179 pattern: pattern, 3180 flags: flags 3181 }; 3182 } 3183 3184 /** 3185 * Prepares an options object from the given value. 3186 * 3187 * @private 3188 * @param {String|Object} value Value to convert to an options object. 3189 * @returns {Object} Options object. 3190 */ 3191 function prepareOptions(value) { 3192 var options = {}; 3193 3194 if (isType(value, 'String')) { 3195 XRegExp.forEach(value, /[^\s,]+/, function (match) { 3196 options[match] = true; 3197 }); 3198 3199 return options; 3200 } 3201 3202 return value; 3203 } 3204 3205 /** 3206 * Registers a flag so it doesn't throw an 'unknown flag' error. 3207 * 3208 * @private 3209 * @param {String} flag Single-character flag to register. 3210 */ 3211 function registerFlag(flag) { 3212 if (!/^[\w$]$/.test(flag)) { 3213 throw new Error('Flag must be a single character A-Za-z0-9_$'); 3214 } 3215 3216 registeredFlags[flag] = true; 3217 } 3218 3219 /** 3220 * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified 3221 * position, until a match is found. 3222 * 3223 * @private 3224 * @param {String} pattern Original pattern from which an XRegExp object is being built. 3225 * @param {String} flags Flags being used to construct the regex. 3226 * @param {Number} pos Position to search for tokens within `pattern`. 3227 * @param {Number} scope Regex scope to apply: 'default' or 'class'. 3228 * @param {Object} context Context object to use for token handler functions. 3229 * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`. 3230 */ 3231 function runTokens(pattern, flags, pos, scope, context) { 3232 var i = tokens.length; 3233 var leadChar = pattern.charAt(pos); 3234 var result = null; 3235 var match; 3236 var t; 3237 3238 // Run in reverse insertion order 3239 while (i--) { 3240 t = tokens[i]; 3241 if ( 3242 (t.leadChar && t.leadChar !== leadChar) || 3243 (t.scope !== scope && t.scope !== 'all') || 3244 (t.flag && flags.indexOf(t.flag) === -1) 3245 ) { 3246 continue; 3247 } 3248 3249 match = XRegExp.exec(pattern, t.regex, pos, 'sticky'); 3250 if (match) { 3251 result = { 3252 matchLength: match[0].length, 3253 output: t.handler.call(context, match, scope, flags), 3254 reparse: t.reparse 3255 };
3256 // Finished with token tests 3257 break; 3258 } 3259 } 3260 3261 return result; 3262 } 3263 3264 /** 3265 * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to 3266 * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if 3267 * the Unicode Base addon is not available, since flag A is registered by that addon. 3268 * 3269 * @private 3270 * @param {Boolean} on `true` to enable; `false` to disable. 3271 */ 3272 function setAstral(on) { 3273 features.astral = on; 3274 } 3275 3276 /** 3277 * Enables or disables native method overrides. 3278 * 3279 * @private 3280 * @param {Boolean} on `true` to enable; `false` to disable. 3281 */ 3282 function setNatives(on) { 3283 RegExp.prototype.exec = (on ? fixed : nativ).exec; 3284 RegExp.prototype.test = (on ? fixed : nativ).test; 3285 String.prototype.match = (on ? fixed : nativ).match; 3286 String.prototype.replace = (on ? fixed : nativ).replace; 3287 String.prototype.split = (on ? fixed : nativ).split; 3288 3289 features.natives = on; 3290 } 3291 3292 /** 3293 * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow 3294 * the ES5 abstract operation `ToObject`. 3295 * 3296 * @private 3297 * @param {*} value Object to check and return. 3298 * @returns {*} The provided object. 3299 */ 3300 function toObject(value) { 3301 // null or undefined 3302 if (value == null) { 3303 throw new TypeError('Cannot convert null or undefined to object'); 3304 } 3305 3306 return value; 3307 } 3308 3309// ==--------------------------== 3310// Constructor 3311// ==--------------------------== 3312 3313 /** 3314 * Creates an extended regular expression object for matching text with a pattern. Differs from a 3315 * native regular expression in that additional syntax and flags are supported. The returned object 3316 * is in fact a native `RegExp` and works with all native methods. 3317 * 3318 * @class XRegExp 3319 * @constructor 3320 * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy. 3321 * @param {String} [flags] Any combination of flags. 3322 * Native flags: 3323 * - `g` - global 3324 * - `i` - ignore case 3325 * - `m` - multiline anchors 3326 * - `u` - unicode (ES6) 3327 * - `y` - sticky (Firefox 3+, ES6) 3328 * Additional XRegExp flags: 3329 * - `n` - explicit capture 3330 * - `s` - dot matches all (aka singleline) 3331 * - `x` - free-spacing and line comments (aka extended) 3332 * - `A` - astral (requires the Unicode Base addon) 3333 * Flags cannot be provided when constructing one `RegExp` from another. 3334 * @returns {RegExp} Extended regular expression object. 3335 * @example 3336 * 3337 * // With named capture and flag x 3338 * XRegExp('(?<year> [0-9]{4} ) -? # year \n\ 3339 * (?<month> [0-9]{2} ) -? # month \n\ 3340 * (?<day> [0-9]{2} ) # day ', 'x'); 3341 * 3342 * // Providing a regex object c
vendor: 13,692 bytes, lines 3342-3542
3342opies it. Native regexes are recompiled using native (not XRegExp) 3343 * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and 3344 * // have fresh `lastIndex` properties (set to zero). 3345 * XRegExp(/regex/); 3346 */ 3347 function XRegExp(pattern, flags) { 3348 if (XRegExp.isRegExp(pattern)) { 3349 if (flags !== undefined) { 3350 throw new TypeError('Cannot supply flags when copying a RegExp'); 3351 } 3352 return copyRegex(pattern); 3353 } 3354 3355 // Copy the argument behavior of `RegExp` 3356 pattern = pattern === undefined ? '' : String(pattern); 3357 flags = flags === undefined ? '' : String(flags); 3358 3359 if (XRegExp.isInstalled('astral') && flags.indexOf('A') === -1) { 3360 // This causes an error to be thrown if the Unicode Base addon is not available 3361 flags += 'A'; 3362 } 3363 3364 if (!patternCache[pattern]) { 3365 patternCache[pattern] = {}; 3366 } 3367 3368 if (!patternCache[pattern][flags]) { 3369 var context = { 3370 hasNamedCapture: false, 3371 captureNames: [] 3372 }; 3373 var scope = defaultScope; 3374 var output = ''; 3375 var pos = 0; 3376 var result; 3377 3378 // Check for flag-related errors, and strip/apply flags in a leading mode modifier 3379 var applied = prepareFlags(pattern, flags); 3380 var appliedPattern = applied.pattern; 3381 var appliedFlags = applied.flags; 3382 3383 // Use XRegExp's tokens to translate the pattern to a native regex pattern. 3384 // `appliedPattern.length` may change on each iteration if tokens use `reparse` 3385 while (pos < appliedPattern.length) { 3386 do { 3387 // Check for custom tokens at the current position 3388 result = runTokens(appliedPattern, appliedFlags, pos, scope, context); 3389 // If the matched token used the `reparse` option, splice its output into the 3390 // pattern before running tokens again at the same position 3391 if (result && result.reparse) { 3392 appliedPattern = appliedPattern.slice(0, pos) + 3393 result.output + 3394 appliedPattern.slice(pos + result.matchLength); 3395 } 3396 } while (result && result.reparse); 3397 3398 if (result) { 3399 output += result.output; 3400 pos += (result.matchLength || 1); 3401 } else { 3402 // Get the native token at the current position 3403 var token = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky')[0]; 3404 output += token; 3405 pos += token.length; 3406 if (token === '[' && scope === defaultScope) { 3407 scope = classScope; 3408 } else if (token === ']' && scope === classScope) { 3409 scope = defaultScope; 3410 } 3411 } 3412 } 3413 3414 patternCache[pattern][flags] = { 3415 // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty 3416 // groups are sometimes inserted during regex transpilation in order to keep tokens 3417 // separated. However, more than one empty group in a row is never needed. 3418 pattern: nativ.replace.call(output, /(?:\(\?:\))+/g, '(?:)'), 3419 // Strip all but native flags 3420 flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''), 3421 // `context.captureNames` has an item for each capturing group, even if unnamed 3422 captures: context.hasNamedCapture ? context.captureNames : null 3423 }; 3424 } 3425 3426 var generated = patternCache[pattern][flags]; 3427 return augment( 3428 new RegExp(generated.pattern, generated.flags), 3429 generated.captures, 3430 pattern, 3431 flags 3432 ); 3433 } 3434 3435// Add `RegExp.prototype` to the prototype chain 3436 XRegExp.prototype = new RegExp(); 3437 3438// ==--------------------------== 3439// Public properties 3440// ==--------------------------== 3441 3442 /** 3443 * The XRegExp version number as a string containing three dot-separated parts. For example, 3444 * '2.0.0-beta-3'. 3445 * 3446 * @static 3447 * @memberOf XRegExp 3448 * @type String 3449 */ 3450 XRegExp.version = '3.2.0'; 3451 3452// ==--------------------------== 3453// Public methods 3454// ==--------------------------== 3455 3456// Intentionally undocumented; used in tests and addons 3457 XRegExp._clipDuplicates = clipDuplicates; 3458 XRegExp._hasNativeFlag = hasNativeFlag; 3459 XRegExp._dec = dec; 3460 XRegExp._hex = hex; 3461 XRegExp._pad4 = pad4; 3462 3463 /** 3464 * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to 3465 * create XRegExp addons. If more than one token can match the same string, the last added wins. 3466 * 3467 * @memberOf XRegExp 3468 * @param {RegExp} regex Regex object that matches the new token. 3469 * @param {Function} handler Function that returns a new pattern string (using native regex syntax) 3470 * to replace the matched token within all future XRegExp regexes. Has access to persistent 3471 * properties of the regex being built, through `this`. Invoked with three arguments: 3472 * - The match array, with named backreference properties. 3473 * - The regex scope where the match was found: 'default' or 'class'. 3474 * - The flags used by the regex, including any flags in a leading mode modifier. 3475 * The handler function becomes part of the XRegExp construction process, so be careful not to 3476 * construct XRegExps within the function or you will trigger infinite recursion. 3477 * @param {Object} [options] Options object with optional properties: 3478 * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'. 3479 * - `flag` {String} Single-character flag that triggers the token. This also registers the 3480 * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used. 3481 * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are 3482 * not required to trigger the token. This registers the flags, to prevent XRegExp from 3483 * throwing an 'unknown flag' error when any of the flags are used. 3484 * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as 3485 * final, and instead be reparseable by other tokens (including the current token). Allows 3486 * token chaining or deferring. 3487 * - `leadChar` {String} Single character that occurs at the beginning of any successful match 3488 * of the token (not always applicable). This doesn't change the behavior of the token unless 3489 * you provide an erroneous value. However, providing it can increase the token's performance 3490 * since the token can be skipped at any positions where this character doesn't appear. 3491 * @example 3492 * 3493 * // Basic usage: Add \a for the ALERT control code 3494 * XRegExp.addToken( 3495 * /\\a/, 3496 * function() {return '\\x07';}, 3497 * {scope: 'all'} 3498 * ); 3499 * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true 3500 * 3501 * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers. 3502 * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of 3503 * // character classes only) 3504 * XRegExp.addToken( 3505 * /([?*+]|{\d+(?:,\d*)?})(\??)/, 3506 * function(match) {return match[1] + (match[2] ? '' : '?');}, 3507 * {flag: 'U'} 3508 * ); 3509 * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a' 3510 * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa' 3511 */ 3512 XRegExp.addToken = function (regex, handler, options) { 3513 options = options || {}; 3514 var optionalFlags = options.optionalFlags; 3515 var i; 3516 3517 if (options.flag) { 3518 registerFlag(options.flag); 3519 } 3520 3521 if (optionalFlags) { 3522 optionalFlags = nativ.split.call(optionalFlags, ''); 3523 for (i = 0; i < optionalFlags.length; ++i) { 3524 registerFlag(optionalFlags[i]); 3525 } 3526 } 3527 3528 // Add to the private list of syntax tokens 3529 tokens.push({ 3530 regex: copyRegex(regex, { 3531 addG: true, 3532 addY: hasNativeY, 3533 isInternalOnly: true 3534 }), 3535 handler: handler, 3536 scope: options.scope || defaultScope, 3537 flag: options.flag, 3538 reparse: options.reparse, 3539 leadChar: options.leadChar 3540 }); 3541 3542 // Reset the pattern cache used by the `XReg
3542Exp` constructor, since the same pattern and flags 3543 // might now produce different results 3544 XRegExp.cache.flush('patterns'); 3545 }; 3546 3547 /** 3548 * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with 3549 * the same pattern and flag combination, the cached copy of the regex is returned. 3550 * 3551 * @memberOf XRegExp 3552 * @param {String} pattern Regex pattern string. 3553 * @param {String} [flags] Any combination of XRegExp flags. 3554 * @returns {RegExp} Cached XRegExp object. 3555 * @example 3556 * 3557 * while (match = XRegExp.cache('.', 'gs').exec(str)) { 3558 * // The regex is compiled once only 3559 * } 3560 */ 3561 XRegExp.cache = function (pattern, flags) { 3562 if (!regexCache[pattern]) { 3563 regexCache[pattern] = {}; 3564 } 3565 return regexCache[pattern][flags] || ( 3566 regexCache[pattern][flags] = XRegExp(pattern, flags) 3567 ); 3568 }; 3569 3570// Intentionally undocumented; used in tests 3571 XRegExp.cache.flush = function (cacheName) { 3572 if (cacheName === 'patterns') { 3573 // Flush the pattern cache used by the `XRegExp` constructor 3574 patternCache = {}; 3575 } else { 3576 // Flush the regex cache populated by `XRegExp.cache` 3577 regexCache = {}; 3578 } 3579 }; 3580 3581 /** 3582 * Escapes any regular expression metacharacters, for use when matching literal strings. The result 3583 * can safely be used at any point within a regex that uses any flags. 3584 * 3585 * @memberOf XRegExp 3586 * @param {String} str String to escape. 3587 * @returns {String} String with regex metacharacters escaped. 3588 * @example 3589 * 3590 * XRegExp.escape('Escaped? <.>'); 3591 * // -> 'Escaped\?\ <\.>' 3592 */ 3593 XRegExp.escape = function (str) { 3594 return nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 3595 }; 3596 3597 /** 3598 * Executes a regex search in a specified string. Returns a match array or `null`. If the provided 3599 * regex uses named capture, named backreference properties are included on the match array. 3600 * Optional `pos` and `sticky` arguments specify the search start position, and whether the match 3601 * must start at the specified position only. The `lastIndex` property of the provided regex is not 3602 * used, but is updated for compatibility. Also fixes browser bugs compared to the native 3603 * `RegExp.prototype.exec` and can be used reliably cross-browser. 3604 * 3605 * @memberOf XRegExp 3606 * @param {String} str String to search. 3607 * @param {RegExp} regex Regex to search with. 3608 * @param {Number} [pos=0] Zero-based index at which to start the search. 3609 * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position 3610 * only. The string `'sticky'` is accepted as an alternative to `true`. 3611 * @returns {Array}
3611 Match array with named backreference properties, or `null`. 3612 * @example 3613 * 3614 * // Basic use, with named backreference 3615 * var match = XRegExp.exec('U+2620', XRegExp('U\\+(?<hex>[0-9A-F]{4})')); 3616 * match.hex; // -> '2620' 3617 * 3618 * // With pos and sticky, in a loop 3619 * var pos = 2, result = [], match; 3620 * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { 3621 * result.push(match[1]); 3622 * pos = match.index + match[0].length; 3623 * } 3624 * // result -> ['2', '3', '4'] 3625 */ 3626 XRegExp.exec = function (str, regex, pos, sticky) { 3627 var cacheKey = 'g'; 3628 var addY = false; 3629 var fakeY = false; 3630 var match; 3631 var r2; 3632 3633 addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false)); 3634 if (addY) { 3635 cacheKey += 'y'; 3636 } else if (sticky) { 3637 // Simulate sticky matching by appending an empty capture to the original regex. The 3638 // resulting regex will succeed no matter what at the current index (set with `lastIndex`), 3639 // and will not search the rest of the subject string. We'll know that the original regex 3640 // has failed if that last capture is `''` rather than `undefined` (i.e., if that last 3641 // capture participated in the match). 3642 fakeY = true; 3643 cacheKey += 'FakeY'; 3644 } 3645 3646 regex[REGEX_DATA] = regex[REGEX_DATA] || {}; 3647 3648 // Shares cached copies with `XRegExp.match`/`replace` 3649 r2 = regex[REGEX_DATA][cacheKey] || ( 3650 regex[REGEX_DATA][cacheKey] = copyRegex(regex, { 3651 addG: true, 3652 addY: addY, 3653 source: fakeY ? regex.source + '|()' : undefined, 3654 removeY: sticky === false, 3655 isInternalOnly: true 3656 }) 3657 ); 3658 3659 pos = pos || 0; 3660 r2.lastIndex = pos; 3661 3662 // Fixed `exec` required for `lastIndex` fix, named backreferences, etc. 3663 match = fixed.exec.call(r2, str); 3664 3665 // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means 3666 // the original regexp failed (see above). 3667 if (fakeY && match && match.pop() === '') { 3668 match = null; 3669 } 3670 3671 if (regex.global) { 3672 regex.lastIndex = match ? r2.lastIndex : 0; 3673 } 3674 3675 return match; 3676 }; 3677 3678 /** 3679 * Executes a provided function once per regex match. Searches always start at the beginning of the 3680 * string and continue until the end, regardless of the state of the regex's `global` property and 3681 * initial `lastIndex`. 3682 * 3683 * @memberOf XRegExp 3684 * @param {String} str String to search. 3685 * @param {RegExp} regex Regex to search with. 3686 * @param {Function} callback Function to execute for each match. Invoked with four arguments: 3687 * - The match array, with named backreference properties. 3688 * - The zero-based match index. 3689 * - The string being traversed. 3690 * - The regex object being used to traverse the string. 3691 * @example 3692 * 3693 * // Extracts every other digit from a string 3694 * var evens = [];
vendor: 7,982 bytes, lines 3695-3818
3695 * XRegExp.forEach('1a2345', /\d/, function(match, i) { 3696 * if (i % 2) evens.push(+match[0]); 3697 * }); 3698 * // evens -> [2, 4] 3699 */ 3700 XRegExp.forEach = function (str, regex, callback) { 3701 var pos = 0; 3702 var i = -1; 3703 var match; 3704 3705 while ((match = XRegExp.exec(str, regex, pos))) { 3706 // Because `regex` is provided to `callback`, the function could use the deprecated/ 3707 // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec` 3708 // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop, 3709 // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of 3710 // regexes, mutating the regex will not have any effect on the iteration or matched strings, 3711 // which is a nice side effect that brings extra safety. 3712 callback(match, ++i, str, regex); 3713 3714 pos = match.index + (match[0].length || 1); 3715 } 3716 }; 3717 3718 /** 3719 * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with 3720 * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native 3721 * regexes are not recompiled using XRegExp syntax. 3722 * 3723 * @memberOf XRegExp 3724 * @param {RegExp} regex Regex to globalize. 3725 * @returns {RegExp} Copy of the provided regex with flag `g` added. 3726 * @example 3727 * 3728 * var globalCopy = XRegExp.globalize(/regex/); 3729 * globalCopy.global; // -> true 3730 */ 3731 XRegExp.globalize = function (regex) { 3732 return copyRegex(regex, {addG: true}); 3733 }; 3734 3735 /** 3736 * Installs optional features according to the specified options. Can be undone using 3737 * `XRegExp.uninstall`. 3738 * 3739 * @memberOf XRegExp 3740 * @param {Object|String} options Options object or string. 3741 * @example 3742 * 3743 * // With an options object 3744 * XRegExp.install({ 3745 * // Enables support for astral code points in Unicode addons (implicitly sets flag A) 3746 * astral: true, 3747 * 3748 * // DEPRECATED: Overrides native regex methods with fixed/extended versions 3749 * natives: true 3750 * }); 3751 * 3752 * // With an options string 3753 * XRegExp.install('astral natives'); 3754 */ 3755 XRegExp.install = function (options) { 3756 options = prepareOptions(options); 3757 3758 if (!features.astral && options.astral) { 3759 setAstral(true); 3760 } 3761 3762 if (!features.natives && options.natives) { 3763 setNatives(true); 3764 } 3765 }; 3766 3767 /** 3768 * Checks whether an individual optional feature is installed. 3769 * 3770 * @memberOf XRegExp 3771 * @param {String} feature Name of the feature to check. One of: 3772 * - `astral` 3773 * - `natives` 3774 * @returns {Boolean} Whether the feature is installed. 3775 * @example 3776 * 3777 * XRegExp.isInstalled('astral'); 3778 */ 3779 XRegExp.isInstalled = function (feature) { 3780 return !!(features[feature]); 3781 }; 3782 3783 /** 3784 * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes 3785 * created in another frame, when `instanceof` and `constructor` checks would fail. 3786 * 3787 * @memberOf XRegExp 3788 * @param {*} value Object to check. 3789 * @returns {Boolean} Whether the object is a `RegExp` object. 3790 * @example 3791 * 3792 * XRegExp.isRegExp('string'); // -> false 3793 * XRegExp.isRegExp(/regex/i); // -> true 3794 * XRegExp.isRegExp(RegExp('^', 'm')); // -> true 3795 * XRegExp.isRegExp(XRegExp('(?s).')); // -> true 3796 */ 3797 XRegExp.isRegExp = function (value) { 3798 return toString.call(value) === '[object RegExp]'; 3799 //return isType(value, 'RegExp'); 3800 }; 3801 3802 /** 3803 * Returns the first matched string, or in global mode, an array containing all matched strings. 3804 * This is essentially a more convenient re-implementation of `String.prototype.match` that gives 3805 * the result types you actually want (string instead of `exec`-style array in match-first mode, 3806 * and an empty array instead of `null` when no matches are found in match-all mode). It also lets 3807 * you override flag g and ignore `lastIndex`, and fixes browser bugs. 3808 * 3809 * @memberOf XRegExp 3810 * @param {String} str String to search. 3811 * @param {RegExp} regex Regex to search with. 3812 * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to 3813 * return an array of all matched strings. If not explicitly specified and `regex` uses flag g, 3814 * `scope` is 'all'. 3815 * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all 3816 * mode: Array of all matched strings, or an empty array. 3817 * @example 3818 *
3819 * // Match first 3820 * XRegExp.match('abc', /\w/); // -> 'a' 3821 * XRegExp.match('abc', /\w/g, 'one'); // -> 'a' 3822 * XRegExp.match('abc', /x/g, 'one'); // -> null 3823 * 3824 * // Match all 3825 * XRegExp.match('abc', /\w/g); // -> ['a', 'b', 'c'] 3826 * XRegExp.match('abc', /\w/, 'all'); // -> ['a', 'b', 'c'] 3827 * XRegExp.match('abc', /x/, 'all'); // -> [] 3828 */ 3829 XRegExp.match = function (str, regex, scope) { 3830 var global = (regex.global && scope !== 'one') || scope === 'all'; 3831 var cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY'; 3832 var result; 3833 var r2; 3834 3835 regex[REGEX_DATA] = regex[REGEX_DATA] || {}; 3836 3837 // Shares cached copies with `XRegExp.exec`/`replace` 3838 r2 = regex[REGEX_DATA][cacheKey] || ( 3839 regex[REGEX_DATA][cacheKey] = copyRegex(regex, { 3840 addG: !!global, 3841 removeG: scope === 'one', 3842 isInternalOnly: true 3843 }) 3844 ); 3845 3846 result = nativ.match.call(toObject(str), r2); 3847 3848 if (regex.global) { 3849 regex.lastIndex = ( 3850 (scope === 'one' && result) ? 3851 // Can't use `r2.lastIndex` since `r2` is nonglobal in this case 3852 (result.index + result[0].length) : 0 3853 ); 3854 } 3855 3856 return global ? (result || []) : (result && result[0]); 3857 }; 3858 3859 /** 3860 * Retrieves the matches from searching a string using a chain of regexes that successively search 3861 * within previous matches. The provided `chain` array can contain regexes and or objects with 3862 * `regex` and `backref` properties. When a backreference is specified, the named or numbered 3863 * backreference is passed forward to the next regex or returned. 3864 * 3865 * @memberOf XRegExp 3866 * @param {String} str String to search. 3867 * @param {Array} chain Regexes that each search for matches within preceding results. 3868 * @returns {Array} Matches by the last regex in the chain, or an empty array. 3869 * @example 3870 * 3871 * // Basic usage; matches numbers within <b> tags 3872 * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [ 3873 * XRegExp('(?is)<b>.*?</b>'), 3874 * /\d+/ 3875 * ]); 3876 * // -> ['2', '4', '56'] 3877 * 3878 * // Passing forward and returning specific backreferences 3879 * html = '<a href="http://xregexp.com/api/">XRegExp</a>\ 3880 * <a href="http://www.google.com/">Google</a>'; 3881 * XRegExp.matchChain(html, [ 3882 * {regex: /<a href="([^"]+)">/i, backref: 1}, 3883 * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'} 3884 * ]); 3885 * // -> ['xregexp.com', 'www.google.com'] 3886 */ 3887 XRegExp.matchChain = function (str, chain) { 3888 return (function recurseChain(values, level) { 3889 var item = chain[level].regex ? chain[level]
vendor: 5,219 bytes, lines 3889-3952
3889: {regex: chain[level]}; 3890 var matches = []; 3891 3892 function addMatch(match) { 3893 if (item.backref) { 3894 // Safari 4.0.5 (but not 5.0.5+) inappropriately uses sparse arrays to hold the 3895 // `undefined`s for backreferences to nonparticipating capturing groups. In such 3896 // cases, a `hasOwnProperty` or `in` check on its own would inappropriately throw 3897 // the exception, so also check if the backreference is a number that is within the 3898 // bounds of the array. 3899 if (!(match.hasOwnProperty(item.backref) || +item.backref < match.length)) { 3900 throw new ReferenceError('Backreference to undefined group: ' + item.backref); 3901 } 3902 3903 matches.push(match[item.backref] || ''); 3904 } else { 3905 matches.push(match[0]); 3906 } 3907 } 3908 3909 for (var i = 0; i < values.length; ++i) { 3910 XRegExp.forEach(values[i], item.regex, addMatch); 3911 } 3912 3913 return ((level === chain.length - 1) || !matches.length) ? 3914 matches : 3915 recurseChain(matches, level + 1); 3916 }([str], 0)); 3917 }; 3918 3919 /** 3920 * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string 3921 * or regex, and the replacement can be a string or a function to be called for each match. To 3922 * perform a global search and replace, use the optional `scope` argument or include flag g if using 3923 * a regex. Replacement strings can use `${n}` for named and numbered backreferences. Replacement 3924 * functions can use named backreferences via `arguments[0].name`. Also fixes browser bugs compared 3925 * to the native `String.prototype.replace` and can be used reliably cross-browser. 3926 * 3927 * @memberOf XRegExp 3928 * @param {String} str String to search. 3929 * @param {RegExp|String} search Search pattern to be replaced. 3930 * @param {String|Function} replacement Replacement string or a function invoked to create it. 3931 * Replacement strings can include special replacement syntax: 3932 * - $$ - Inserts a literal $ character. 3933 * - $&, $0 - Inserts the matched substring. 3934 * - $` - Inserts the string that precedes the matched substring (left context). 3935 * - $' - Inserts the string that follows the matched substring (right context). 3936 * - $n, $nn - Where n/nn are digits referencing an existent capturing group, inserts 3937 * backreference n/nn. 3938 * - ${n} - Where n is a name or any number of digits that reference an existent capturing 3939 * group, inserts backreference n. 3940 * Replacement functions are invoked with three or more arguments: 3941 * - The matched substring (corresponds to $& above). Named backreferences are accessible as 3942 * properties of this first argument. 3943 * - 0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). 3944 * - The zero-based index of the match within the total search string. 3945 * - The total string being searched. 3946 * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not 3947 * explicitly specified and using a regex with flag g, `scope` is 'all'. 3948 * @returns {String} New string with one or all matches replaced. 3949 * @example 3950 * 3951 * // Regex search, using named backreferences in replacement string 3952 * var name = XRegExp('(?<first>\\w+) (?<last>
3952\\w+)'); 3953 * XRegExp.replace('John Smith', name, '${last}, ${first}'); 3954 * // -> 'Smith, John' 3955 * 3956 * // Regex search, using named backreferences in replacement function 3957 * XRegExp.replace('John Smith', name, function(match) { 3958 * return match.last + ', ' + match.first; 3959 * }); 3960 * // -> 'Smith, John' 3961 * 3962 * // String search, with replace-all 3963 * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all'); 3964 * // -> 'XRegExp builds XRegExps' 3965 */ 3966 XRegExp.replace = function (str, search, replacement, scope) { 3967 var isRegex = XRegExp.isRegExp(search); 3968 var global = (search.global && scope !== 'one') || scope === 'all'; 3969 var cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY'; 3970 var s2 = search; 3971 var result; 3972 3973 if (isRegex) { 3974 search[REGEX_DATA] = search[REGEX_DATA] || {}; 3975 3976 // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s 3977 // `lastIndex` isn't updated *during* replacement iterations 3978 s2 = search[REGEX_DATA][cacheKey] || ( 3979 search[REGEX_DATA][cacheKey] = copyRegex(search, { 3980 addG: !!global, 3981 removeG: scope === 'one', 3982 isInternalOnly: true 3983 }) 3984 ); 3985 } else if (global) { 3986 s2 = new RegExp(XRegExp.escape(String(search)), 'g'); 3987 } 3988 3989 // Fixed `replace` required for named backreferences, etc. 3990 result = fixed.replace.call(toObject(str), s2, replacement); 3991 3992 if (isRegex && search.global) { 3993 // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) 3994 search.lastIndex = 0; 3995 } 3996 3997 return result; 3998 }; 3999 4000 /** 4001 * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an 4002 * array of replacement details. Later replacements operate on the output of earlier replacements. 4003 * Replacement details are accepted as an array with a regex or string to search for, the 4004 * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp 4005 * replacement text syntax, which supports named backreference properties via `${name}`. 4006 * 4007 * @memberOf XRegExp 4008 * @param {String} str String to search. 4009 * @param {Array} replacements Array of replacement detail arrays. 4010 * @returns {String} New string with all replacements. 4011 * @example 4012 * 4013 * str = XRegExp.replaceEach(str, [ 4014 * [XRegExp('(?<name>a)'), 'z${name}'], 4015 * [/b/gi, 'y'], 4016 * [/c/g, 'x', 'one'], // scope 'one' overrides /g 4017 * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g 4018 * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings
vendor: 46,519 bytes, lines 4019-4704
4019 * [/f/g, function($0) { 4020 * return $0.toUpperCase(); 4021 * }] 4022 * ]); 4023 */ 4024 XRegExp.replaceEach = function (str, replacements) { 4025 var i; 4026 var r; 4027 4028 for (i = 0; i < replacements.length; ++i) { 4029 r = replacements[i]; 4030 str = XRegExp.replace(str, r[0], r[1], r[2]); 4031 } 4032 4033 return str; 4034 }; 4035 4036 /** 4037 * Splits a string into an array of strings using a regex or string separator. Matches of the 4038 * separator are not included in the result array. However, if `separator` is a regex that contains 4039 * capturing groups, backreferences are spliced into the result each time `separator` is matched. 4040 * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably 4041 * cross-browser. 4042 * 4043 * @memberOf XRegExp 4044 * @param {String} str String to split. 4045 * @param {RegExp|String} separator Regex or string to use for separating the string. 4046 * @param {Number} [limit] Maximum number of items to include in the result array. 4047 * @returns {Array} Array of substrings. 4048 * @example 4049 * 4050 * // Basic use 4051 * XRegExp.split('a b c', ' '); 4052 * // -> ['a', 'b', 'c'] 4053 * 4054 * // With limit 4055 * XRegExp.split('a b c', ' ', 2); 4056 * // -> ['a', 'b'] 4057 * 4058 * // Backreferences in result array 4059 * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); 4060 * // -> ['..', 'word', '1', '..'] 4061 */ 4062 XRegExp.split = function (str, separator, limit) { 4063 return fixed.split.call(toObject(str), separator, limit); 4064 }; 4065 4066 /** 4067 * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and 4068 * `sticky` arguments specify the search start position, and whether the match must start at the 4069 * specified position only. The `lastIndex` property of the provided regex is not used, but is 4070 * updated for compatibility. Also fixes browser bugs compared to the native 4071 * `RegExp.prototype.test` and can be used reliably cross-browser. 4072 * 4073 * @memberOf XRegExp 4074 * @param {String} str String to search. 4075 * @param {RegExp} regex Regex to search with. 4076 * @param {Number} [pos=0] Zero-based index at which to start the search. 4077 * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position 4078 * only. The string `'sticky'` is accepted as an alternative to `true`. 4079 * @returns {Boolean} Whether the regex matched the provided value. 4080 * @example 4081 * 4082 * // Basic use 4083 * XRegExp.test('abc', /c/); // -> true 4084 * 4085 * // With pos and sticky 4086 * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false 4087 * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true 4088 */ 4089 XRegExp.test = function (str, regex, pos, sticky) { 4090 // Do this the easy way :-) 4091 return !!XRegExp.exec(str, regex, pos, sticky); 4092 }; 4093 4094 /** 4095 * Uninstalls optional features according to the specified options. All optional features start out 4096 * uninstalled, so this is used to undo the actions of `XRegExp.install`. 4097 * 4098 * @memberOf XRegExp 4099 * @param {Object|String} options Options object or string. 4100 * @example 4101 * 4102 * // With an options object 4103 * XRegExp.uninstall({ 4104 * // Disables support for astral code points in Unicode addons 4105 * astral: true, 4106 * 4107 * // DEPRECATED: Restores native regex methods 4108 * natives: true 4109 * }); 4110 * 4111 * // With an options string 4112 * XRegExp.uninstall('astral natives'); 4113 */ 4114 XRegExp.uninstall = function (options) { 4115 options = prepareOptions(options); 4116 4117 if (features.astral && options.astral) { 4118 setAstral(false); 4119 } 4120 4121 if (features.natives && options.natives) { 4122 setNatives(false); 4123 } 4124 }; 4125 4126 /** 4127 * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as 4128 * regex objects or strings. Metacharacters are escaped in patterns provided as strings. 4129 * Backreferences in provided regex objects are automatically renumbered to work correctly within 4130 * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the 4131 * `flags` argument. 4132 * 4133 * @memberOf XRegExp 4134 * @param {Array} patterns Regexes and strings to combine. 4135 * @param {String} [flags] Any combination of XRegExp flags. 4136 * @param {Object} [options] Options object with optional properties: 4137 * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'. 4138 * @returns {RegExp} Union of the provided regexes and strings. 4139 * @example 4140 * 4141 * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); 4142 * // -> /a\+b\*c|(dogs)\1|(cats)\2/i 4143 * 4144 * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'}); 4145 * // -> /manbearpig/i 4146 */ 4147 XRegExp.union = function (patterns, flags, options) { 4148 options = options || {}; 4149 var conjunction = options.conjunction || 'or'; 4150 var numCaptures = 0; 4151 var numPriorCaptures; 4152 var captureNames; 4153 4154 function rewrite(match, paren, backref) { 4155 var name = captureNames[numCaptures - numPriorCaptures]; 4156 4157 // Capturing group 4158 if (paren) { 4159 ++numCaptures; 4160 // If the current capture has a name, preserve the name 4161 if (name) { 4162 return '(?<' + name + '>'; 4163 } 4164 // Backreference 4165 } else if (backref) { 4166 // Rewrite the backreference 4167 return '\\' + (+backref + numPriorCaptures); 4168 } 4169 4170 return match; 4171 } 4172 4173 if (!(isType(patterns, 'Array') && patterns.length)) { 4174 throw new TypeError('Must provide a nonempty array of patterns to merge'); 4175 } 4176 4177 var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; 4178 var output = []; 4179 var pattern; 4180 for (var i = 0; i < patterns.length; ++i) { 4181 pattern = patterns[i]; 4182 4183 if (XRegExp.isRegExp(pattern)) { 4184 numPriorCaptures = numCaptures; 4185 captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || []; 4186 4187 // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are 4188 // independently valid; helps keep this simple. Named captures are put back 4189 output.push(nativ.replace.call(XRegExp(pattern.source).source, parts, rewrite)); 4190 } else { 4191 output.push(XRegExp.escape(pattern)); 4192 } 4193 } 4194 4195 var separator = conjunction === 'none' ? '' : '|'; 4196 return XRegExp(output.join(separator), flags); 4197 }; 4198 4199// ==--------------------------== 4200// Fixed/extended native methods 4201// ==--------------------------== 4202 4203 /** 4204 * Adds named capture support (with backreferences returned as `result.name`), and fixes browser 4205 * bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to 4206 * override the native method. Use via `XRegExp.exec` without overriding natives. 4207 * 4208 * @memberOf RegExp 4209 * @param {String} str String to search. 4210 * @returns {Array} Match array with named backreference properties, or `null`. 4211 */ 4212 fixed.exec = function (str) { 4213 var origLastIndex = this.lastIndex; 4214 var match = nativ.exec.apply(this, arguments); 4215 var name; 4216 var r2; 4217 var i; 4218 4219 if (match) { 4220 // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing 4221 // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9 4222 // in standards mode follows the spec. 4223 if (!correctExecNpcg && match.length > 1 && indexOf(match, '') > -1) { 4224 r2 = copyRegex(this, { 4225 removeG: true, 4226 isInternalOnly: true 4227 }); 4228 // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed 4229 // matching due to characters outside the match 4230 nativ.replace.call(String(str).slice(match.index), r2, function () { 4231 var len = arguments.length; 4232 var i; 4233 // Skip index 0 and the last 2 4234 for (i = 1; i < len - 2; ++i) { 4235 if (arguments[i] === undefined) { 4236 match[i] = undefined; 4237 } 4238 } 4239 }); 4240 } 4241 4242 // Attach named capture properties 4243 if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { 4244 // Skip index 0 4245 for (i = 1; i < match.length; ++i) { 4246 name = this[REGEX_DATA].captureNames[i - 1]; 4247 if (name) { 4248 match[name] = match[i]; 4249 } 4250 } 4251 } 4252 4253 // Fix browsers that increment `lastIndex` after zero-length matches 4254 if (this.global && !match[0].length && (this.lastIndex > match.index)) { 4255 this.lastIndex = match.index; 4256 } 4257 } 4258 4259 if (!this.global) { 4260 // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) 4261 this.lastIndex = origLastIndex; 4262 } 4263 4264 return match; 4265 }; 4266 4267 /** 4268 * Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')` 4269 * uses this to override the native method. 4270 * 4271 * @memberOf RegExp 4272 * @param {String} str String to search. 4273 * @returns {Boolean} Whether the regex matched the provided value. 4274 */ 4275 fixed.test = function (str) { 4276 // Do this the easy way :-) 4277 return !!fixed.exec.call(this, str); 4278 }; 4279 4280 /** 4281 * Adds named capture support (with backreferences returned as `result.name`), and fixes browser 4282 * bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to 4283 * override the native method. 4284 * 4285 * @memberOf String 4286 * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`. 4287 * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g, 4288 * the result of calling `regex.exec(this)`. 4289 */ 4290 fixed.match = function (regex) { 4291 var result; 4292 4293 if (!XRegExp.isRegExp(regex)) { 4294 // Use the native `RegExp` rather than `XRegExp` 4295 regex = new RegExp(regex); 4296 } else if (regex.global) { 4297 result = nativ.match.apply(this, arguments); 4298 // Fixes IE bug 4299 regex.lastIndex = 0; 4300 4301 return result; 4302 } 4303 4304 return fixed.exec.call(regex, toObject(this)); 4305 }; 4306 4307 /** 4308 * Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and 4309 * provides named backreferences to replacement functions as `arguments[0].name`. Also fixes browser 4310 * bugs in replacement text syntax when performing a replacement using a nonregex search value, and 4311 * the value of a replacement regex's `lastIndex` property during replacement iterations and upon 4312 * completion. Calling `XRegExp.install('natives')` uses this to override the native method. Note 4313 * that this doesn't support SpiderMonkey's proprietary third (`flags`) argument. Use via 4314 * `XRegExp.replace` without overriding natives. 4315 * 4316 * @memberOf String 4317 * @param {RegExp|String} search Search pattern to be replaced. 4318 * @param {String|Function} replacement Replacement string or a function invoked to create it. 4319 * @returns {String} New string with one or all matches replaced. 4320 */ 4321 fixed.replace = function (search, replacement) { 4322 var isRegex = XRegExp.isRegExp(search); 4323 var origLastIndex; 4324 var captureNames; 4325 var result; 4326 4327 if (isRegex) { 4328 if (search[REGEX_DATA]) { 4329 captureNames = search[REGEX_DATA].captureNames; 4330 } 4331 // Only needed if `search` is nonglobal 4332 origLastIndex = search.lastIndex; 4333 } else { 4334 search += ''; // Type-convert 4335 } 4336 4337 // Don't use `typeof`; some older browsers return 'function' for regex objects 4338 if (isType(replacement, 'Function')) { 4339 // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement 4340 // functions isn't type-converted to a string 4341 result = nativ.replace.call(String(this), search, function () { 4342 var args = arguments; 4343 var i; 4344 if (captureNames) { 4345 // Change the `arguments[0]` string primitive to a `String` object that can store 4346 // properties. This really does need to use `String` as a constructor 4347 args[0] = new String(args[0]); 4348 // Store named backreferences on the first argument 4349 for (i = 0; i < captureNames.length; ++i) { 4350 if (captureNames[i]) { 4351 args[0][captureNames[i]] = args[i + 1]; 4352 } 4353 } 4354 } 4355 // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox, Safari 4356 // bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1) 4357 if (isRegex && search.global) { 4358 search.lastIndex = args[args.length - 2] + args[0].length; 4359 } 4360 // ES6 specs the context for replacement functions as `undefined` 4361 return replacement.apply(undefined, args); 4362 }); 4363 } else { 4364 // Ensure that the last value of `args` will be a string when given nonstring `this`, 4365 // while still throwing on null or undefined context 4366 result = nativ.replace.call(this == null ? this : String(this), search, function () { 4367 // Keep this function's `arguments` available through closure 4368 var args = arguments; 4369 return nativ.replace.call(String(replacement), replacementToken, function ($0, $1, $2) { 4370 var n; 4371 // Named or numbered backreference with curly braces 4372 if ($1) { 4373 // XRegExp behavior for `${n}`: 4374 // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for the 4375 // entire match. Any number of leading zeros may be used. 4376 // 2. Backreference to named capture `n`, if it exists and is not an integer 4377 // overridden by numbered capture. In practice, this does not overlap with 4378 // numbered capture since XRegExp does not allow named capture to use a bare 4379 // integer as the name. 4380 // 3. If the name or number does not refer to an existing capturing group, it's 4381 // an error. 4382 n = +$1; // Type-convert; drop leading zeros 4383 if (n <= args.length - 3) { 4384 return args[n] || ''; 4385 } 4386 // Groups with the same name is an error, else would need `lastIndexOf` 4387 n = captureNames ? indexOf(captureNames, $1) : -1; 4388 if (n < 0) { 4389 throw new SyntaxError('Backreference to undefined group ' + $0); 4390 } 4391 return args[n + 1] || ''; 4392 } 4393 // Else, special variable or numbered backreference without curly braces 4394 if ($2 === '$') { // $$ 4395 return '$'; 4396 } 4397 if ($2 === '&' || +$2 === 0) { // $&, $0 (not followed by 1-9), $00 4398 return args[0]; 4399 } 4400 if ($2 === '`') { // $` (left context) 4401 return args[args.length - 1].slice(0, args[args.length - 2]); 4402 } 4403 if ($2 === "'") { // $' (right context) 4404 return args[args.length - 1].slice(args[args.length - 2] + args[0].length); 4405 } 4406 // Else, numbered backreference without curly braces 4407 $2 = +$2; // Type-convert; drop leading zero 4408 // XRegExp behavior for `$n` and `$nn`: 4409 // - Backrefs end after 1 or 2 digits. Use `${..}` for more digits. 4410 // - `$1` is an error if no capturing groups. 4411 // - `$10` is an error if less than 10 capturing groups. Use `${1}0` instead. 4412 // - `$01` is `$1` if at least one capturing group, else it's an error. 4413 // - `$0` (not followed by 1-9) and `$00` are the entire match. 4414 // Native behavior, for comparison: 4415 // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+. 4416 // - `$1` is a literal `$1` if no capturing groups. 4417 // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups. 4418 // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`. 4419 // - `$0` is a literal `$0`. 4420 if (!isNaN($2)) { 4421 if ($2 > args.length - 3) { 4422 throw new SyntaxError('Backreference to undefined group ' + $0); 4423 } 4424 return args[$2] || ''; 4425 } 4426 // `$` followed by an unsupported char is an error, unlike native JS 4427 throw new SyntaxError('Invalid token ' + $0); 4428 }); 4429 }); 4430 } 4431 4432 if (isRegex) { 4433 if (search.global) { 4434 // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) 4435 search.lastIndex = 0; 4436 } else { 4437 // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) 4438 search.lastIndex = origLastIndex; 4439 } 4440 } 4441 4442 return result; 4443 }; 4444 4445 /** 4446 * Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')` 4447 * uses this to override the native method. Use via `XRegExp.split` without overriding natives. 4448 * 4449 * @memberOf String 4450 * @param {RegExp|String} separator Regex or string to use for separating the string. 4451 * @param {Number} [limit] Maximum number of items to include in the result array. 4452 * @returns {Array} Array of substrings. 4453 */ 4454 fixed.split = function (separator, limit) { 4455 if (!XRegExp.isRegExp(separator)) { 4456 // Browsers handle nonregex split correctly, so use the faster native method 4457 return nativ.split.apply(this, arguments); 4458 } 4459 4460 var str = String(this); 4461 var output = []; 4462 var origLastIndex = separator.lastIndex; 4463 var lastLastIndex = 0; 4464 var lastLength; 4465 4466 // Values for `limit`, per the spec: 4467 // If undefined: pow(2,32) - 1 4468 // If 0, Infinity, or NaN: 0 4469 // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32); 4470 // If negative number: pow(2,32) - floor(abs(limit)) 4471 // If other: Type-convert, then use the above rules 4472 // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless 4473 // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+ 4474 limit = (limit === undefined ? -1 : limit) >>> 0; 4475 4476 XRegExp.forEach(str, separator, function (match) { 4477 // This condition is not the same as `if (match[0].length)` 4478 if ((match.index + match[0].length) > lastLastIndex) { 4479 output.push(str.slice(lastLastIndex, match.index)); 4480 if (match.length > 1 && match.index < str.length) { 4481 Array.prototype.push.apply(output, match.slice(1)); 4482 } 4483 lastLength = match[0].length; 4484 lastLastIndex = match.index + lastLength; 4485 } 4486 }); 4487 4488 if (lastLastIndex === str.length) { 4489 if (!nativ.test.call(separator, '') || lastLength) { 4490 output.push(''); 4491 } 4492 } else { 4493 output.push(str.slice(lastLastIndex)); 4494 } 4495 4496 separator.lastIndex = origLastIndex; 4497 return output.length > limit ? output.slice(0, limit) : output; 4498 }; 4499 4500// ==--------------------------== 4501// Built-in syntax/flag tokens 4502// ==--------------------------== 4503 4504 /* 4505 * Letter escapes that natively match literal characters: `\a`, `\A`, etc. These should be 4506 * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser 4507 * consistency and to reserve their syntax, but lets them be superseded by addons. 4508 */ 4509 XRegExp.addToken( 4510 /\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, 4511 function (match, scope) { 4512 // \B is allowed in default scope only 4513 if (match[1] === 'B' && scope === defaultScope) { 4514 return match[0]; 4515 } 4516 throw new SyntaxError('Invalid escape ' + match[0]); 4517 }, 4518 { 4519 scope: 'all', 4520 leadChar: '\\' 4521 } 4522 ); 4523 4524 /* 4525 * Unicode code point escape with curly braces: `\u{N..}`. `N..` is any one or more digit 4526 * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag 4527 * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to 4528 * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior 4529 * if you follow a `\u{N..}` token that references a code point above U+FFFF with a quantifier, or 4530 * if you use the same in a character class. 4531 */ 4532 XRegExp.addToken( 4533 /\\u{([\dA-Fa-f]+)}/, 4534 function (match, scope, flags) { 4535 var code = dec(match[1]); 4536 if (code > 0x10FFFF) { 4537 throw new SyntaxError('Invalid Unicode code point ' + match[0]); 4538 } 4539 if (code <= 0xFFFF) { 4540 // Converting to \uNNNN avoids needing to escape the literal character and keep it 4541 // separate from preceding tokens 4542 return '\\u' + pad4(hex(code)); 4543 } 4544 // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling 4545 if (hasNativeU && flags.indexOf('u') > -1) { 4546 return match[0]; 4547 } 4548 throw new SyntaxError('Cannot use Unicode code point above \\u{FFFF} without flag u'); 4549 }, 4550 { 4551 scope: 'all', 4552 leadChar: '\\' 4553 } 4554 ); 4555 4556 /* 4557 * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency. 4558 * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because 4559 * character class endings can't be determined. 4560 */ 4561 XRegExp.addToken( 4562 /\[(\^?)\]/, 4563 function (match) { 4564 // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. 4565 // (?!) should work like \b\B, but is unreliable in some versions of Firefox 4566 return match[1] ? '[\\s\\S]' : '\\b\\B'; 4567 }, 4568 {leadChar: '['} 4569 ); 4570 4571 /* 4572 * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in 4573 * free-spacing mode (flag x). 4574 */ 4575 XRegExp.addToken( 4576 /\(\?#[^)]*\)/, 4577 getContextualTokenSeparator, 4578 {leadChar: '('} 4579 ); 4580 4581 /* 4582 * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only. 4583 */ 4584 XRegExp.addToken( 4585 /\s+|#[^\n]*\n?/, 4586 getContextualTokenSeparator, 4587 {flag: 'x'} 4588 ); 4589 4590 /* 4591 * Dot, in dotall mode (aka singleline mode, flag s) only. 4592 */ 4593 XRegExp.addToken( 4594 /\./, 4595 function () { 4596 return '[\\s\\S]'; 4597 }, 4598 { 4599 flag: 's', 4600 leadChar: '.' 4601 } 4602 ); 4603 4604 /* 4605 * Named backreference: `\k<name>`. Backreference names can use the characters A-Z, a-z, 0-9, _, 4606 * and $ only. Also allows numbered backreferences as `\k<n>`. 4607 */ 4608 XRegExp.addToken( 4609 /\\k<([\w$]+)>/, 4610 function (match) { 4611 // Groups with the same name is an error, else would need `lastIndexOf` 4612 var index = isNaN(match[1]) ? (indexOf(this.captureNames, match[1]) + 1) : +match[1]; 4613 var endIndex = match.index + match[0].length; 4614 if (!index || index > this.captureNames.length) { 4615 throw new SyntaxError('Backreference to undefined group ' + match[0]); 4616 } 4617 // Keep backreferences separate from subsequent literal numbers. This avoids e.g. 4618 // inadvertedly changing `(?<n>)\k<n>1` to `()\11`. 4619 return '\\' + index + ( 4620 endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ? 4621 '' : '(?:)' 4622 ); 4623 }, 4624 {leadChar: '\\'} 4625 ); 4626 4627 /* 4628 * Numbered backreference or octal, plus any following digits: `\0`, `\11`, etc. Octals except `\0` 4629 * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches 4630 * are returned unaltered. IE < 9 doesn't support backreferences above `\99` in regex syntax. 4631 */ 4632 XRegExp.addToken( 4633 /\\(\d+)/, 4634 function (match, scope) { 4635 if ( 4636 !( 4637 scope === defaultScope && 4638 /^[1-9]/.test(match[1]) && 4639 +match[1] <= this.captureNames.length 4640 ) && 4641 match[1] !== '0' 4642 ) { 4643 throw new SyntaxError('Cannot use octal escape or backreference to undefined group ' + 4644 match[0]); 4645 } 4646 return match[0]; 4647 }, 4648 { 4649 scope: 'all', 4650 leadChar: '\\' 4651 } 4652 ); 4653 4654 /* 4655 * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the 4656 * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style 4657 * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively 4658 * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to 4659 * Python-style named capture as octals. 4660 */ 4661 XRegExp.addToken( 4662 /\(\?P?<([\w$]+)>/, 4663 function (match) { 4664 // Disallow bare integers as names because named backreferences are added to match arrays 4665 // and therefore numeric properties may lead to incorrect lookups 4666 if (!isNaN(match[1])) { 4667 throw new SyntaxError('Cannot use integer as capture name ' + match[0]); 4668 } 4669 if (match[1] === 'length' || match[1] === '__proto__') { 4670 throw new SyntaxError('Cannot use reserved word as capture name ' + match[0]); 4671 } 4672 if (indexOf(this.captureNames, match[1]) > -1) { 4673 throw new SyntaxError('Cannot use same name for multiple groups ' + match[0]); 4674 } 4675 this.captureNames.push(match[1]); 4676 this.hasNamedCapture = true; 4677 return '('; 4678 }, 4679 {leadChar: '('} 4680 ); 4681 4682 /* 4683 * Capturing group; match the opening parenthesis only. Required for support of named capturing 4684 * groups. Also adds explicit capture mode (flag n). 4685 */ 4686 XRegExp.addToken( 4687 /\((?!\?)/, 4688 function (match, scope, flags) { 4689 if (flags.indexOf('n') > -1) { 4690 return '(?:'; 4691 } 4692 this.captureNames.push(null); 4693 return '('; 4694 }, 4695 { 4696 optionalFlags: 'n', 4697 leadChar: '(' 4698 } 4699 ); 4700 4701 module.exports = XRegExp; 4702 4703 }, {}]}, {}, [8])(8) 4704 });
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.