JavaScript include()并忽略任何空格,修复代码格式

问题描述 投票:0回答:2

我有一个函数,该函数接受string(特别是来自输入的地址或邮政编码),然后在匹配的结果周围添加强标签。它工作正常,但我希望它匹配无空格的字符。例如,如果输入字符串是cf142,我希望它匹配CF14 2

下面是功能:

emboldenMatch(string, query) {
  query = query.toLowerCase().trim();
  if (string.toLowerCase().includes(query)) {
    const queryLength = query.length;
    const matchIndex = string.toLowerCase().indexOf(query);
    const matchEnd = matchIndex + queryLength;
    const before = string.substr(0, matchIndex);
    const match = string.substr(matchIndex, queryLength);
    const after = string.substr(matchEnd, string.length - matchEnd);  

    return `${before}<strong>${match}</strong>${after}`;
  } else {
    return string;
  }
}
javascript string whitespace
2个回答
1
投票

首先,您可以按如下方式编写现有功能:

 function emboldenMatch(string, query) {
    return string.replace(query, "<strong>$&</strong>")
}
console.log(em('some string with bold text', 'bold'));

如果要包装每个匹配项,而不仅是第一个匹配项,并且不敏感,可以将其设置为regexp,并添加g(=全局)标志和i(=不敏感)标记:

function emboldenMatch(string, query) {
  return string.replace(new RegExp(escapeRegExp(query), 'gi'), "<strong>$&</strong>")
}
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

console.log(emboldenMatch('some string with bold bold text', 'bold'));

现在,如果要在字符之间添加可选空格,可以按如下所示将其添加到正则表达式中:

function emboldenMatch(string, query) {
    var reg = new RegExp(escapeRegExp(query).split('').join('\\s*'), 'gi');
    return string.replace(reg, "<strong>$&</strong>")
}
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

console.log(emboldenMatch('some string with bo ld  b old text', 'bold'));

0
投票

尝试:

function emboldenMatch(string, query) {
    query = query.toLowerCase().trim().replace(/ /g,'');
    if (string.toLowerCase().includes(query)) {
      const queryLength = query.length;
      const matchIndex = string.toLowerCase().indexOf(query);
      const matchEnd = matchIndex + queryLength;
      const before = string.substr(0, matchIndex);
      const match = string.substr(matchIndex, queryLength);
      const after = string.substr(matchEnd, string.length - matchEnd);  

      return `${before}<strong>${match}</strong>${after}`;
    } else {
      return string;
    }
  }
  
  console.log(emboldenMatch('asdf2', 'asdf 2'))
  console.log(emboldenMatch('asdf2', 'asdf2'))
© www.soinside.com 2019 - 2024. All rights reserved.