javascript - 用于在子字符串搜索中忽略特殊字符的正则表达式

标签 javascript regex

我有一个带有搜索框的 HTML 表格,当找到完全匹配时,它会用 span 标记包围值,这样我就可以用 CSS 突出显示它。我遇到的问题是尝试实现 RegExp 方法,该方法将在忽略特殊字符的同时查找子字符串。

工作代码

this.tableSearch为搜索框字符串值

value = 是表格单元格中的数据点字符串

    if (this.tableSearch != "") {
        const regexSearch = new RegExp('(' + this.tableSearch + ')', 'ig');
        value = value && value.replace(regexSearch, '<span class="table-data-found">$1</span>');
    }

即。 this.tableSearch = “821”

(405) 821-7615

(817) 240-7821

这对我来说是个挑战。RegExp 方法需要查找和添加跨度标记的一些用例

“8-21”忽略破折号“-”

(512) 248-2144

AND 还找到 "8) 21"忽略括号和空格 ") "

(818) 217​​-2144

这种 RegExp 方法也适用于其他类型的数据,例如地址

即。 this.tableSearch = "19803 E 38TH ST"

查找忽略“.”的地址

19803 E. 38TH ST

我该如何解决这个问题?

最佳答案

我相信有更好的方法来做到这一点,但您基本上想说在您的搜索词之间有一些字符集是允许的。在这种情况下,您似乎想要排除 (空格)、-(连字符)、(句点)、( (左括号)和 )(右括号)。

因此,如果您将搜索词拆分为允许 0 到排除列表中的更多项目,那么您应该能够找到所需的字符串。

例如

var tableSearch = "821";
var phone1 = "(405) 821-7615";
var phone2 = "(817) 240-7821";

var data = [];
data.push(phone1);
data.push(phone2);

var regex = '[.\ -]*';
var searchTerm = tableSearch.split("").join(regex);

for (var i = 0; i < data.length; i++) {
    var matches = data[i].match(searchTerm);
    console.log(matches);
}

运行时产生:

[ '821', index: 6, input: '(405) 821-7615', groups: undefined ]
[ '821', index: 11, input: '(817) 240-7821', groups: undefined ]

使用 * 表示“将 0 匹配到一个或多个”。您可以将 * 替换为 ? 以仅匹配 0 或 1。但这在字符串具有超过 1 个排除项的情况下不起作用。

我发现 https://regex101.com/是进行正则表达式测试以解决所有问题的好网站。

关于javascript - 用于在子字符串搜索中忽略特殊字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907086/

相关文章:

javascript - 从正则表达式文字转换为RegExp构造函数

python - 如何在 python 2.7 中使用 re.UNICODE?

javascript - 正则表达式从路径中排除文件夹

javascript - 如何使用 ajax javascript php 将大型 json 数据(250kb)发送到 mysql 数据库

javascript - HTML:获取由不同元素组成的文本并显示在一行中(链接和文本)

javascript - 如何获取网格中的存储范围

regex - Grok 调试器和 Logstash grok 中的不同行为

JavaScript 正则表达式,搜索主题标签

javascript - 从数组中删除项目的最有效方法?

javascript - 为什么我的 HighCharts 图表无法呈现?