regex 带和不带逗号的表搜索字符串的正则表达式

9bfwbjaz  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(114)

我在查找表搜索结果的正则表达式解决方案时遇到问题。我尝试了下面的正则表达式,但它没有按预期工作。
第一

const regex = new RegExp(
  searchTerm
    ?.toString()
    .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
    .replace(/\s+/g, "|") + ",?",
  "gi"
);

第二

const regex = new RegExp(
  searchTerm
    ?.toString()
    .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
    .replace(/\s+/g, "|") + "|,",
  "gi"
);

第三

const regex = new RegExp(searchTerm.replace(/,/g, "\\s*,\\s*"), "gi");

我可以突出显示准确的搜索结果,但我也想突出显示带有逗号的字符串。

有什么办法可以解决这个问题吗?

c0vxltue

c0vxltue1#

您可以在搜索词的每个字符后添加预定义长度(示例中为0-1)的正则字符类,如标点符号和符号。
这将允许更大范围的可能结果,并返回匹配项以突出显示它们。

search.oninput = function() {
  if (this.value) {
    // character classes punctuation and symbols can be behind every char
    const possibleNextchar = "[\\p{P}\\p{S}]?",
      toEscape = '.^$*+?()[{\\|';
    const re = new RegExp(
      '(' + this.value.replace(/./gu,
        (char) => (toEscape.includes(char) ? "\\" + char : char) + possibleNextchar 
      ) + ')', "gu");
    console.log(re);
    table.querySelectorAll("td").forEach(td => {
      re.lastIndex = -1;
      console.log([...td.innerText.matchAll(re)]);
    })
  }
}
search.oninput();
<input type="text" id="search" value="247">
<table id="table">
  <tr>
    <td>$ 2,477.00</td>
    <td>122477123</td>
    <td>24/7</td>
  </tr>
</table>

相关问题