-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
/
Copy pathutils.js
52 lines (48 loc) · 1.48 KB
/
utils.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
43
44
45
46
47
48
49
50
51
52
/**
* Converts a colon formatted string to a object with properties.
*
* This is process a provided string and look for any tokens in the format
* of `:name[=value]` and then convert it to a object and return.
* An example of this is ':include :type=code :fragment=demo' is taken and
* then converted to:
*
* ```
* {
* include: '',
* type: 'code',
* fragment: 'demo'
* }
* ```
*
* @param {string} str The string to parse.
*
* @return {object} The original string and parsed object, { str, config }.
*/
export function getAndRemoveConfig(str = '') {
const config = {};
if (str) {
str = str
.replace(
/(?:^|\s):([\w-]+:?)=?([\w-%]+|"((?!").)*"|[“”][^“”]*[“”])?/g, // Note: because the provided `str` argument has been html-escaped, with backslashes stripped, we cannot support escaped characters in quoted strings :-(
function (m, key, value) {
if (key.indexOf(':') === -1) {
config[key] = (value && value.replace(/"|[“”]/g, '')) || true;
return '';
}
return m;
}
)
.replace(/^('|")|('|")$/g, '')
.trim();
}
return { str, config };
}
/**
* Remove the <a> tag from sidebar when the header with link, details see issue 1069
* @param {string} str The string to deal with.
*
* @return {string} str The string after delete the <a> element.
*/
export function removeAtag(str = '') {
return str.replace(/(<\/?a.*?>)/gi, '');
}