RegEx для игнорирования специальных символов при поиске подстроки - PullRequest
1 голос
/ 29 апреля 2019

У меня есть таблица HTML с окном поиска, когда при поиске точного совпадения оно будет окружать значение тегом span, чтобы я мог выделить его с помощью CSS. Проблема, с которой я столкнулся, заключается в попытке реализовать метод RegExp, который будет искать подстроку, игнорируя при этом специальные символы.

Рабочий код

this.tableSearch - значение строки окна поиска

значение = это строка точки данных в ячейке таблицы

    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 Ответ

2 голосов
/ 30 апреля 2019

Я уверен, что есть лучший способ сделать это, но вы бы хотели сказать, что есть некоторый набор символов, который вы позволите использовать в поисковой фразе. В этом случае похоже, что вы хотите исключить (пробел), - (дефис), . (точка), ( (левая часть) и ) (правая часть).

Таким образом, если вы хотите разделить поисковый запрос с разрешением от 0 до нескольких элементов из исключенного списка, то вы сможете найти нужную строку.

1010 * Е.Г. *

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/ - хороший сайт для тестирования регулярных выражений, чтобы понять все это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...