我有new RegExp(`\\b${escapedQuery}`, "i")正则表达式来搜索单词边界,其中escapedQuerylodash's escapeRegExp function之后的转义值.

const BRANDS = [
  "Alexander McQueen",
  "Alexandre De Paris",
  "alexander.t",
  "A.W.A.K.E. MODE",
  "alexanderwang.t",
  "MARC JACOBS (THE)"
];

function filter(query) {
  return BRANDS.filter((brand) => {
    const escapedQuery = escapeRegExp(query);
    const re = new RegExp(`\\b${escapedQuery}`, "i");
    return re.test(brand);
  });
}

但是,如果我传递一个点或括号符号,我就得不到预期的值.

console.log(filter("al")); // OK [  "Alexander McQueen",  "Alexandre De Paris",  "alexander.t",  "alexanderwang.t"]
console.log(filter("M")); // OK [  "Alexander McQueen", "A.W.A.K.E. MODE", "MARC JACOBS (THE)"]
console.log(filter(".")); // Expected [""] - Actual ["alexander.t", "A.W.A.K.E. MODE", "alexanderwang.t"]
console.log(filter("(")); // OK [""] 
console.log(filter(")")); // Expected [""] - Actual ["MARC JACOBS (THE)"]

下面是Sandbox条,以更好地理解预期和实际结果

需要在表达式中修复什么才能返回期望值?

推荐答案

您可以要求第一个字符始终是单词char:

function filter(query) {
    return BRANDS.filter((brand) => {
        const re = new RegExp(`(?=\\w)${query.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}`, "i");
        return re.test(brand);
   });
}

请看下面的演示:

const BRANDS = [
  "Alexander McQueen",
  "Alexandre De Paris",
  "alexander.t",
  "A.W.A.K.E. MODE",
  "alexanderwang.t",
  "MARC JACOBS (THE)"
];

function filter(query) {
  return BRANDS.filter((brand) => {
    const re = new RegExp(`(?=\\w)${query.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}`, "i");
    return re.test(brand);
  });
}

console.log(filter("al")); // OK [  "Alexander McQueen",  "Alexandre De Paris",  "alexander.t",  "alexanderwang.t"]
console.log(filter("M")); // OK [  "Alexander McQueen", "A.W.A.K.E. MODE", "MARC JACOBS (THE)"]
console.log(filter(".")); // Expected [""] - Actual ["alexander.t", "A.W.A.K.E. MODE", "alexanderwang.t"]
console.log(filter("(")); // OK [""] 
console.log(filter(")")); // Expected [""] - Actual ["MARC JACOBS (THE)"]

Javascript相关问答推荐

在JavaScript中逐一播放随机生成的音频文件数组

在JavaScript中检索一些文本

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

如何修复(或忽略)HTML模板中的TypeScript错误?'

colored颜色 检测JS,平均图像 colored颜色 检测JS

有没有可能使滑动img动画以更快的速度连续?

当试图显示小部件时,使用者会出现JavaScript错误.

如何从调整大小/zoom 的SVG路径定义新的d属性?""

如何在 cypress 中使用静态嵌套循环

Html文件和客户端存储的相关问题,有没有可能?

JS:XML insertBefore插入元素

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

在HTML语言中调用外部JavaScript文件中的函数

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

第二次更新文本输入字段后,Reaction崩溃

如何在DYGRAPS中更改鼠标事件和键盘输入

向数组中的对象添加键而不改变原始变量

如何访问此数组中的值?

自动滚动功能在当前图像左侧显示上一张图像的一部分

如何在每隔2分钟刷新OKTA令牌后停止页面刷新