当前位置: 首页 > 知识库问答 >
问题:

javascript中的转义正则表达式特殊字符,但仍保留匹配关键字的字符串完整性

崔绍辉
2023-03-14

当用户在搜索框中键入时,我试图在我的网页上突出显示一些文本。我的搜索算法是简单地匹配每个空格分隔的关键字。在我开始给我的搜索词添加括号之前,我认为这个功能是完美的。这将启动SynTaxError:无效的正则表达式: ****: 未终止组”,因为它会被正则表达式解释。我试图跳过括号和其他字符,但高亮显示不起作用。

https://codepen.io/anon/pen/YOaYEv

highlight (str) {
    // this line works but prevents highlighting multiple keywords that arent connected
    // var replacedStr = (this.search || '').replace(/[-[\]{}()*+!<=:?.\\^$|#\s,]/g, '\\$&')

    // you can comment this line and uncomment above to see a different but not perfect option
    var replacedStr = (this.search || '').replace(/ /g, '|')
    return str.replace(new RegExp(replacedStr, 'gi'), match => {
      return '<span class="font-weight-bold">' + match + '</span>'
    })
}

所以我需要避开括号。我在注释行中尝试了这一点,但该函数未能突出显示文本中的所有关键字:/

有什么想法吗?

共有1个答案

吴高峰
2023-03-14

您需要转义要搜索并突出显示的每个非空白块。此外,不需要在replace中使用回调来替换整个匹配,您可以使用$

请参阅更新的JS:

vm = new Vue({
    el: "#app",
    data() {
        return {
            search: null,
            message: 'Search this text for matches (check the bracketed area too)'
        };
    },
    computed: {},
    methods: {
        highlight (str) {
          var replacedStr = (this.search || '').trim().split(/\s+/).map(x => x.replace(/[-[\]{}()*+!<=:?.\\^$|#\s,]/g, '\\$&')).join("|");
          return str.replace(new RegExp(replacedStr, 'gi'), 
            '<span class="teal--text text--darken-1 font-weight-bold">$&</span>');
        }
    }
});

这里:

  • 。修剪()。拆分(/\s/)。地图(x)=

 类似资料:
  • 我有一个类似这样的字符串: 但是我得到了一个 你知道我做错了什么吗?

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • Java 或任何开源库中是否有任何方法可以转义(不引用)特殊字符(元字符),以便将其用作正则表达式? 这在动态构建正则表达式时非常方便,而无需手动转义每个单独的字符。 例如,考虑一个简单的正则表达式,如 \d \.,它匹配小数点()的数字,以及以下代码: 毫不奇怪,上述代码产生的输出是: 也就是说,匹配但(它是“动态”构建的)不匹配(相反,它匹配文字字符串)。 那么,有没有一种方法可以自动转义每个

  • 我有一些xml文件,希望删除除特定字符串以外的所有内容。 StackOverflow上还有很多类似的问题,但都不适用于我的文件,在尝试了几个小时不同的正则表达式后,我想寻求帮助。 到目前为止,部分成功但并非完全成功的最接近的正则表达式是: xml文件的示例: 我使用regex101,因此可以将示例粘贴在那里,以了解为什么rex只能部分工作。简而言之,它与第一次出现的不匹配,但与第二次出现的匹配。我

  • 本文向大家介绍正则表达式匹配各种特殊字符,包括了正则表达式匹配各种特殊字符的使用技巧和注意事项,需要的朋友参考一下 写个可以匹配一下各种特殊字符的正则表达式 这个匹配所有键盘上可见的非字母和数字的符号 这个是输入框防止特殊字符勿输入验证,包括键盘上所有特殊字符的英文和中文状态。需要者可以根据自身需求而定!谢谢! [^\w\s]+ 匹配非空 非字母 非数字 即可 1 数字:^[0-9]*$ 2 n位

  • 问题内容: 我会在开头提到这个问题,尽管我离正则表达式专家很远,但是它们对我来说并不完全陌生。对于我来说,构建正则表达式来搜索特定字符串中的模式通常不是问题,但是我有一个(也许是?)独特的情况。 我有一组价值观,例如: 028938 DEF567987 390987.456 GHI345928.039 我想匹配一组特定的字符串,例如: 完全由6位数字组成的字符串 字符串,由正好6位数字,十进制组成