JavaScript: выделите подстроку, сохраняющую исходный случай, но ищущую в случае, если нечувствительный режим

Я пытаюсь записать "поле поиска предложения", и я не могу найти решение, которое позволяет выделять подстроку с JavaScript, сохраняющим исходный случай.

Например, если я ищу"ca"Я ищу сторону сервера в нечувствительном к регистру режиме, и у меня есть следующие результаты:

Калькулятор

календарь

ESCAPE

Я хотел бы просмотреть строку поиска во всех предыдущих словах, таким образом, результат должен быть:

Калькулятор

календарь

ESCAPE

Я попробовал следующим кодом:

var reg = new RegExp(querystr, 'gi');
var final_str = 'foo ' + result.replace(reg, '<b>'+querystr+'</b>');
$('#'+id).html(final_str);

Но очевидно таким образом я освобождаю исходный случай!

Существует ли способ решить эту проблему?

27
задан CroMagnon 2 October 2018 в 08:55
поделиться

3 ответа

Используйте функцию для второго аргумента для .replace(), которая возвращает фактическую сопоставимую строку со сцепленными тегами.

Попробуйте: http://jsfiddle.net/4sGLL/

reg = new RegExp(querystr, 'gi');
       // The str parameter references the matched string
       //    --------------------------------------v
final_str = 'foo ' + result.replace(reg, function(str) {return '<b>'+str+'</b>'});
$('#' + id).html(final_str);​

Пример JSFiddle с вводом: https://jsfiddle.net/pawmbude/

56
ответ дан 28 November 2019 в 04:43
поделиться

Я делаю то же самое.

Вам нужно сделать копию.

Я сохраняю в базе данных копию реальной строки в нижнем регистре.

Затем я выполняю поиск, используя строчную версию строки запроса или выполняю регулярное выражение без учета регистра.

Затем используйте полученный найденный начальный индекс в основной строке плюс длину строки запроса, чтобы выделить строку запроса в результате.

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

0
ответ дан 28 November 2019 в 04:43
поделиться

.match() выполняет поиск без учета регистра и возвращает массив совпадений с сохранением регистра.

var matches = str.match(queryString),
    startHere = 0,
    nextMatch,
    resultStr ='',
    qLength = queryString.length;

for (var match in matches) {
    nextMatch = str.substr(startHere).indexOf(match);
    resultStr = resultStr + str.substr(startHere, nextMatch) + '<b>' + match + '</b>';
    startHere = nextMatch + qLength;
}
-1
ответ дан 28 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: