Hash :
571704cb
Author :
Date :
2019-03-04T23:38:57
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
(function (Prism) {
var specialEscape = {
pattern: /\\[\\(){}[\]^$+*?|.]/,
alias: 'escape'
};
var escape = /\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|c[a-zA-Z]|0[0-7]{0,2}|[123][0-7]{2}|.)/
var charClass = /\\[wsd]|\.|\\p{[^{}]+}/i
var rangeChar = '(?:[^\\\\-]|' + escape.source + ')';
var range = RegExp(rangeChar + '-' + rangeChar);
// the name of a capturing group
var groupName = {
pattern: /(<|')[^<>']+(?=[>']$)/,
lookbehind: true,
alias: 'variable'
};
var backreference = [
/\\(?![123][0-7]{2})[1-9]/, // a backreference which is not an octal escape
{
pattern: /\\k<[^<>']+>/,
inside: {
'group-name': groupName
}
}
];
Prism.languages.regex = {
'charset': {
pattern: /((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,
lookbehind: true,
inside: {
'charset-negation': {
pattern: /(^\[)\^/,
lookbehind: true,
},
'charset-punctuation': /^\[|\]$/,
'range': {
pattern: range,
inside: {
'escape': escape,
'range-punctuation': /-/
}
},
'special-escape': specialEscape,
'charclass': charClass,
'backreference': backreference,
'escape': escape
}
},
'special-escape': specialEscape,
'charclass': charClass,
'backreference': backreference,
'anchor': /[$^]|\\[ABbGZz]/,
'escape': escape,
'group': [
{
// https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html
// https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference?view=netframework-4.7.2#grouping-constructs
// (), (?<name>), (?'name'), (?>), (?:), (?=), (?!), (?<=), (?<!), (?is-m), (?i-m:)
pattern: /\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,
inside: {
'group-name': groupName
}
},
/\)/
],
'quantifier': /[+*?]|\{(?:\d+,?\d*)\}/,
'alternation': /\|/
};
[
'actionscript',
'coffescript',
'flow',
'javascript',
'typescript',
'vala'
].forEach(function (lang) {
var grammar = Prism.languages[lang];
if (grammar) {
grammar['regex'].inside = {
'regex-flags': /[a-z]+$/,
'regex-delimiter': /^\/|\/$/,
'language-regex': {
pattern: /[\s\S]+/,
inside: Prism.languages.regex
}
};
}
});
}(Prism))