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

时间:2019-04-29 16:06:47

标签: 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方法需要查找并添加span标签的一些用例

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

(512)248-2144

并且还发现忽略括号和空格的“ 8)21”“)”

(818)217-2144

此RegExp方法还将适用于其他类型的数据,例如地址

即。 this.tableSearch =“ 19803 E 38TH ST”

找到忽略“。”的地址。

19803 E. 38TH ST

我该如何解决这个问题?

1 个答案:

答案 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/是进行正则表达式测试以弄清一切的好站点。