jQuery的text.replace()函数为何会跳过字符串中的部分字符?
问题分析与解决:LUMAX字符匹配不全的问题
问题根源
你的正则表达式里用了\b(单词边界),这才是匹配不全的核心原因:
\b匹配的是单词字符(字母/数字/下划线)与非单词字符的分界位置,或者字符串的开头/结尾。- 比如"labels"里的第三个
l,前后都是单词字符(前面是b,后面是a),不存在单词边界,所以不会被\b${arr.join("|")}\b匹配到。
修正方案
既然目标是匹配任意位置的单个l/u/m/a/x字符,直接去掉正则里的\b即可:
const arr = ['l','u','m','a','x']; // 去掉单词边界,直接匹配单个目标字符 const re = new RegExp(`${arr.join("|")}`,'gi'); $("h4").html((_,text) => text.replace(re,match => `<span>${match}</span>`));
效果验证
对<h4>Love has no labels</h4>处理后,会得到正确结果:
<h4><span>L</span>ove h<span>a</span>s no <span>l</span><span>a</span>bels</h4>
(所有L/l/a都会被<span>包裹,符合需求)
内容的提问来源于stack exchange,提问作者KLSVRT
相关产品推荐
相关产品推荐

