javascript - 不包括点、括号等的正则表达式边界

标签 javascript regex

我有 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 以更好地理解预期和实际结果

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

最佳答案

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

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 - 不包括点、括号等的正则表达式边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73744867/

相关文章:

javascript - 如果它是空字符串,则正则表达式不匹配

regex - 是否有一个 Perl 函数可以将字符串转换为正则表达式以使用该字符串作为模式?

javascript - 使用 e.preventDefault() 后提交表单;

javascript - 在 Protovis 中向 pv.Layout.Stack(流图)添加标签

regex - .htaccess 如何删除文件扩展名和索引文件

javascript - 如何在javascript中计算字符串中的非空行

regex - 在替换中使用变量

javascript - 将 JavaScript 对象序列化为 XML 的最佳方法是什么?

javascript - 替换Bootstrap 4中的loaded.bs.modal

javascript - 如何按值搜索 javascript 对象?