【问题标题】:JS Replace - Remove same capitalisation specification [duplicate]JS 替换 - 删除相同的大写规范 [重复]
【发布时间】:2019-05-23 20:00:00
【问题描述】:

我正在制作一个脚本,通过将字符串的一部分包装在一个跨度中来突出显示它。 (高亮部分由表格决定)

现在我有这个了。

value.replace(term,'<span>'+term+'</span>')

$(document).ready(function(){
  var term = $('.n').val();
  var matches = ['Tree of life','Life of the tree'];
  $('.output>div').remove();
    $.each(matches,function(index,value){
        $('.output').append('<div>'+value.replace(term,'<b>'+term+'</b>')+'</div>')
    })
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<input type="text" class="n" value="Tree">

<h4>Output</h4>
<div class="output">
</div>

但问题是,这需要术语是相同的大小写。

所以如果我正在寻找树:

  • 生命之树 -> 匹配
  • 生命之树 -> 没有匹配项

那么如何在 JS 中进行替换,但不考虑大小写?

【问题讨论】:

  • Obligatory link。您应该尝试使用 DOM 方法。
  • stackoverflow.com/a/494046/3462319, var re = new RegExp(term,"gi");
  • @p.s.w.g 我很确定 OP 在这里没有使用正则表达式,他只是想匹配一个字符串
  • 相关解决方案here
  • @depperm 确保在必要时转义term - 例如,如果term 在正则表达式中包含具有特殊含义的字符,例如^,则仅传递term 将失败

标签: javascript jquery


【解决方案1】:

replace的第一个参数变成一个不区分大小写的正则表达式,而不仅仅是一个字符串:

// https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
const escape = s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
const pattern = new RegExp(escape(term), 'i');
const result = value.replace(pattern, '<span>'+term+'</span>');

如果要替换所有匹配项,请同时使用 g 标志。

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多