我在quickadd里,用到这个函数的正则:
var lineformat = (line) => {
//处理连接,不转义替换
line = line.replace(/\[\[([^\[\]|]+)\]\]/g,(_, group1) => `[[${group1.replace(/\*|\+|\_|\$|%|\<|`|\\|-/g, 'DISCOURSE_PLACEHOLDER_1LDQMark')}]]`);
line = line.replace(/\[\[([^\[\]|]+)\|([^\[\]|]+)\]\]/g,(_, group1,group2) => `[[${group1.replace(/\*|\+|_|\$|%|\<|`|\\|-/g, 'DISCOURSE_PLACEHOLDER_1LDQMark')}|${group2}]]`);
//改为同[[url|title]]
line = line.replace(/\(\(([^()|]+)\|([^()|]+)\)\)/g, (_, group1, group2) => `[${group2}](${group1.replace(/\*|\+|_|\$|%|\<|`|\\|-/g, 'DISCOURSE_PLACEHOLDER_1LDQMark')})`);
line = line.replace(/\(\(([^()|]+)\|\)\)/g, (_, group1) => `[[${group1.replace(/\*|\+|_|\$|%|\<|`|\\|-/g, 'DISCOURSE_PLACEHOLDER_1LDQMark')}]]`);
// **abc
line = line.replace(/(?<!\*)(\*\*)(?!\*)/g, (match, group1) => group1.replace(/\*/g,'DISCOURSE_PLACEHOLDER_1LDQMark'));
// 不使用%%注释
line = line.replace(/(%%+)/g,match => match.replace(/%/g,'\\%'));
// 对html标记,不替换<
line = line.replace(/\<(?=[^<>]+>)/g,"<LDQMark");
// 行首的*-+ 不替换,实际上这三种字符的序列符号都是黑圆点
line = line.replace(/^\s*(\+|-|\*)\s+/g,match => match.replace(/\+|-|\*/g,'DISCOURSE_PLACEHOLDER_1LDQMark'));
// 转义替换
line = line.replace(/\\(?!(\*|\+|\[|_|\$|%|\<|`|\\|-|n))/g, "\\\\");
line = line.replace(/(?<!\\)\*(?!LDQMark)/g, "\\*");
// 使用$fdfj$标记不着色斜体,$...$是latex公式
// line = line.replace(/(?<!\\)\$(?!LDQMark)/g, "\\$");
line = line.replace(/(?<!\\)\<(?!LDQMark)/g, "\\<");
// 不使用下划线表示着色斜体
line = line.replace(/(?<!\\)_(?!LDQMark)/g, "\\_");
// 改为用/* */ 表示斜体
line = line.replace(/\/\\\*/g,"*");
line = line.replace(/\\\*\//g,"*");
// quickadd不知为什么把\n的文本都当作是换行输出
line = line.replace(/\\n/g, "\\%LDQHideFH%n");
// 去掉所有的LDQMark
line = line.replace(/LDQMark/g,"");
return line;
}
这在windows和安卓都是正常的,但在ios(一台前2年买的iphone14)上,则是语法错误:
SyntaxError: Invalid regularexpression: invalid groupspecifer name
我对ios的开发完全不懂,请同学位帮我看看问题出在哪里,如何简单修改,让兼容三个平台吗?