保誠-保戶業務員媒合平台
Tomas
2022-05-19 957a1f10a06fdbb76f1a0ba94fe44126c613fee3
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
 
/**
 * multiple ocurrences of:
 *   - alphabetical letter, underscore or dash, or
 *   - non-ascii character, or
 *   - escaped character
 * @type {RegExp}
 */
var rIdentifier =
  /(?:[A-Za-z0-9_-]|[^\0-\237]|\\(?:[^A-Fa-f0-9]|[A-Fa-f0-9]{1,6} ?))+/;
 
/**
 * backslash followed by a non-hexadecimal letter or
 * a 1 to 6 digit hexadecimal number followed by an optional white space
 * @type {RegExp}
 */
var rEscapedCharacter = /\\([^A-Fa-f0-9]|[A-Fa-f0-9]{1,6} ?)/g;
 
/**
 * Unescapes a single character
 * @param  {string} escapedCharacter escaped character starting with a backslash
 * @return {string} unescaped character
 */
function unescapeCharacter(escapedCharacter) {
  var escapeValue = escapedCharacter.substr(1);
  var numberValue = parseInt(escapeValue, 16);
  if (isNaN(numberValue)) {
    return escapeValue;
  }
 
  return String.fromCharCode(numberValue);
}
 
/**
 * Unescapes all escaped characters in the given identifier
 * @param  {string} identifier identifier with possible escaped characters
 * @return {string} unescaped identifier
 */
function unescapeIdentifier(identifier) {
  return identifier.replace(rEscapedCharacter, unescapeCharacter);
}
 
module.exports = {
  rIdentifier: rIdentifier,
  rEscapedCharacter: rEscapedCharacter,
  unescapeIdentifier: unescapeIdentifier,
  unescapeCharacter: unescapeCharacter
};