所以我想制作一个代码,使我的HTML列表变为粗体。但它需要在一开始就加粗,直到达到冒号。所以我搜索了一个我认为可以帮助我的代码。并从堆栈溢出中看到了这段代码。但是我没有使用for循环,而是使用foreach循环。
<ul>
<li>Apple: Has the color red</li>
<li>Orange: Has the color orange</li>
<li>Banana: Has the color yellow</li>
<li>Blackberries: Has the color purple</li>
<li>Avocado: Has the color green</li>
</ul>
<script type="text/javascript">
let list = document.querySelectorAll("ul li");
list.forEach((element) => {
element.innerHTML = element.innerText.replace(/^[^:]+:/, '<b>$&</b>');
</script>
它工作得很好!但我不明白/^[^:]+:/
和'<b>$&</b>'
是什么意思或作用。
提前谢谢!
/^[^:]+:/
和<b>$&</b>
第一部分是正则表达式。您可以看到经常包装在/ /
中的正则表达式。正则表达式描述字符串中要匹配的模式。根据上下文的不同,不同的符号意味着不同的东西。
如果正则表达式以^
开头,这意味着模式必须从字符串的开头匹配。innerText的开头是"苹果:…"中的A
接下来我们有[^:]+
。方括号描述了我们正在寻找的字符。所以[a-z]
意味着匹配每一个小写字符。这里不是a-z,而是^:
。在字符括号内,^
表示not
,因此[^:]
表示查找任何非冒号的字符。+
在找到某个东西之后意味着找到其中的一个或多个。因此,[^:]+
意味着找到一个或多个不是:
的字符。
接下来我们有一个:
,意思是找到一个冒号。因此,要读取整个正则表达式,/^[^:]+:/
-从字符串的开头找到每个不是冒号的字符,然后找到一个冒号。如果它发现了这个,它就被认为是匹配的。
<b>$&</b>
描述了如何处理匹配。如果您在第二个自变量Item -
中写入,那么每一行都将去掉水果名称,并将其替换为Item - Has the color red
。这里$&
的意思是"使用我们匹配的东西"。因此,这将获取整个匹配,并将其封装在<b>..</b>
中,使其加粗。
/^[^:]+:/
它匹配从字符串开始到:
的第一个匹配的任何字符将其替换为自身($&
(,但由<b>
标记,使其成为bold
"<li>Apple: Has the color red</li>".replace(/^[^:]+:/, '<b>$&</b>');
结果<li><b>Apple:</b> Has the color red</li>