我有一个带有搜索框的 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/