-
Notifications
You must be signed in to change notification settings - Fork 118
/
Copy pathHTML Entity Parser.js
42 lines (37 loc) · 966 Bytes
/
HTML Entity Parser.js
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
/**
* @param {string} text
* @return {string}
*/
var entityParser = function(text) {
const entityMap = {
'"': `"`,
''': `'`,
'&': `&`,
'>': `>`,
'<': `<`,
'⁄': `/`
}
stack = [], entity = "";
for(const char of text) {
stack.push(char);
if(char == '&') {
if(entity.length > 0) entity = "";
entity += char;
}
else if(char == ';' && entity.length > 0) {
entity += char;
if(entity in entityMap) {
while(stack.length && stack[stack.length - 1] !== '&') {
stack.pop();
}
stack.pop();
stack.push(entityMap[entity]);
}
entity = "";
}
else if(entity.length > 0) {
entity += char;
}
}
return stack.join('');
};