Anki脚本问题:仅首个例句目标词加粗,需实现全部例句目标词加粗
修复Anki例句中目标词仅首次加粗的问题
你的脚本只能给首个目标词加粗,是因为JavaScript的String.replace()方法直接传字符串时,只会替换第一个匹配到的内容。要实现所有目标词都加粗,得用带全局匹配标志的正则表达式。
修改后的完整代码
<span id="sentch"> {{sentch}} </span> <script> // 正则特殊字符转义函数(可选,若目标词含.、*、?等字符则需要) function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } var hanzi = '{{hanzi}}'; // 若目标词无正则特殊字符,可直接用hanzi,无需转义 var targetWord = escapeRegExp(hanzi); var sentchContent = document.getElementById("sentch").innerHTML; document.getElementById("sentch").innerHTML = sentchContent.replace(new RegExp(targetWord, 'g'), "<b>" + hanzi + "</b>"); </script>
关键说明
- 用
new RegExp(目标词, 'g')创建正则表达式,其中g是全局匹配标志,会匹配所有符合条件的目标词 - 若你的目标词可能包含正则特殊字符(比如
$、.、*、(等),必须使用escapeRegExp函数转义,否则正则会匹配出错 - 若确定目标词都是普通汉字/无特殊字符,可以简化代码,去掉转义函数,直接用
new RegExp(hanzi, 'g')
内容的提问来源于stack exchange,提问作者Raymon K
相关产品推荐
相关产品推荐

