javascript 为什么我的jQuerytext.replace()函数会跳过字符串中的某些字符

8cdiaqws  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(113)

我们有一个轮播,每张幻灯片上都有一些标题,还有一个函数,它检查每个标题中的字母LUMAX,这些字母用H4标记 Package ,然后用SPAN标记 Package 。

const arr = ['l','u','m','a','x'];
const re = new RegExp(`\\b${arr.join("|")}\\b`,"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”被包含在SPAN标记中,但是字母L的第三个示例却没有。
我试着用vanilla Javascript重写函数,但也不起作用。

6yoyoihd

6yoyoihd1#

从正则表达式中删除边界\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>`));
span {
  color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h4>Love has no labels</h4>

相关问题