javascript - 如何在字符串中选择星号并设置其样式?

标签 javascript jquery html css regex

我需要为特殊字符设置特定颜色。

具体来说,我想设置星号 *<div>上色 red ,而不直接干预 <div> .

我在网上找到了这个元素,它实际上是为字符设置背景颜色,但是如果我将脚本改编为 * 符号,它就不起作用。

输出示例:

Desired result

$("p").highlight("*","highlight");

jQuery.fn.highlight = function (str, className) {    
    var regex = new RegExp(str, "gi");

    return this.each(function () {
        this.innerHTML = this.innerHTML.replace(regex, function(matched) {return "<span class=\"" + className + "\">" + matched + "</span>";});
    });
};

$("p").highlight("*","highlight");
span.highlight{
   background:#F60;
    padding:5px;
    display:inline-block;
    color:#FFF;
}

p{
   font-family:Verdana;   
}
<p>
    Let's *go Zapata let's do it for the revolution, Zapatistas*!!!   
</p>

如果代替 Z我加了星号*该脚本不起作用。有人可以帮忙吗?

最佳答案

您需要转义星号,因为它在正则表达式中也很重要。使用 \\*:

编辑:按照@DBS的建议,最好在突出显示函数本身中添加此转义检查。代码已修改。

jQuery.fn.highlight = function(str, className) {
  var escapeRegExp = function(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
  }
  var regex = new RegExp(escapeRegExp(str), "gi");

  return this.each(function() {
    this.innerHTML = this.innerHTML.replace(regex, function(matched) {
      return "<span class=\"" + className + "\">" + matched + "</span>";
    });
  });
};

$("p").highlight("*", "highlight");
$("label").highlight("*", "highlight");
span.highlight {
  padding: 5px;
  display: inline-block;
  color: #F60;
}

p {
  font-family: Verdana;
}

input::placeholder {
  color: #F60;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>
  Let's *go Zapata let's do it for the revolution, Zapatistas*!!!
</p>

<label for="txt">Email* </label>
<input placeholder="Email*" type="text" id="txt"/>

关于javascript - 如何在字符串中选择星号并设置其样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232892/

相关文章:

javascript - 如何在 javascript 中使用 Django 模板标签

javascript - 为什么我的代码在 Chrome/Safari 中完全兼容,在 FireFox 中有些兼容,但在 Internet Explorer 8 中却几乎不兼容?

javascript - 在 Android+PhoneGap 中添加关于滚动的帖子

html - 步进器上的 CSS 隐藏线

javascript - 未捕获的类型错误 : undefined is not a function when including javascript class in a seperate file

javascript - 如何使用 Rangey.js 创建没有类属性的标签?

javascript - 如何使用 jquery 更改 html 中的背景颜色

java - JSoup 从 html 文件中按顺序解析文本和链接

javascript - JSON 数据格式已更改且构建无序列表的功能停止工作?

javascript - 如何使浏览器滚动条静态化