Anki是一款记忆辅助软件,它支持用户自己用HTML/CSS/JS来DIY背单词界面
单词的释义由第三方字典生成,然后再导入Anki,为了达到想要的显示效果,需要对导入的文本进行大量的字符替换,这也是使用正则表达式的好机会。
现将实践中用到的技巧总结如下:
1. replace的使用
replace的第二个参数除了接受一个字符串,还可以接受一个函数,且支持连续调用
div.innerHTML = div.innerHTML.replace(/\b[a-z]+\./g, function(symbol) {
if(colorMap[symbol]) {
return '<br/><a style="background-color:' + colorMap[symbol] +
';border-radius: 4px; color:white; padding:0 3px;margin-right:5px">'+
symbol + '</a>';
} else {
return symbol;
}
}).replace(/\],/g, ']  ')
.replace(/(<br\/?>)+/g, '<br/>')
2. new RegExp
Anki有一个bug,如果用正则/\[/g
来替换[符号,会导致页面闪烁,而用RegExp构造函数则不会
RegExp的第一个参数接受/.*/g
的形式,也接受字符串,如果给RegExp传字符串,转义需要用\, 因为字符串本身会吞掉一个\
div.innerHTML = div.innerHTML.replace(new RegExp('\\[', 'g'), '/')
3. 前瞻断言 排除字符串
正则表达式如果要排除字符串,需要用到前瞻断言,比如我想要结果中不包含 <a
,我的表达式如下:
/[美英]((?!<a\s).)*\]/g