我有一个带有搜索框的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方法需要查找并添加span标签的一些用例
“ 8-21”忽略破折号“-”
(512)248-2144
并且还发现忽略括号和空格的“ 8)21”“)”
(818)217-2144
此RegExp方法还将适用于其他类型的数据,例如地址
即。 this.tableSearch =“ 19803 E 38TH ST”
找到忽略“。”的地址。
19803 E. 38TH ST
我该如何解决这个问题?
答案 0 :(得分:2)
我敢肯定,有更好的方法可以做到这一点,但您基本上想说的是,搜索词之间可以包含一些字符集。在这种情况下,您似乎想排除(空格),
-
(连字符),.
(句点),(
(左括号)和{ {1}}(右括号)。
因此,如果您要使用允许的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。但是,如果该字符串具有多个排除项,则该字符串将不起作用。
我发现https://regex101.com/是进行正则表达式测试以弄清一切的好站点。