在生成 csv 文件时,遇到文件内容是下面 json 格式的,需要对特殊字符进行转义
'{"font":{"size":11,"name":"Calibri"},"url":"https://www.bejson.com/"}'
参照 lodash 的转义写法如下:
const reRegExpChar = /[\\"'()[\]{}|]/g;
const reHasRegExpChar = RegExp(reRegExpChar.source);
/**
* Escapes the `RegExp` special characters "\", """, "'",
* "(", ")", "[", "]", "{", "}", and "|" in `string`.
*
* @param {string} [string=''] The string to escape.
* @returns {string} Returns the escaped string.
*
*/
function escapeRegExp(string) {
return (string && reHasRegExpChar.test(string))
? string.replace(reRegExpChar, '\\$&')
: (string || '');
}
转义后为:
"\{\"font\":\{\"size\":11,\"name\":\"Calibri\"\},\"url\":\"https://www.bejson.com/\"\}"
这里用到了 replace 的 replacement 参数特殊用法 $&
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
字符 | 替换文本 |
$1、$2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& | 与 regexp 相匹配的子串。 |
$` | 位于匹配子串左侧的文本。 |
$' | 位于匹配子串右侧的文本。 |
$$ | 直接量符号。 |