Javascript: поиск и splitText с мутировавшим гласным, умляут, - PullRequest
1 голос
/ 07 марта 2011

Я использую бесплатный Javascript для поиска и выделения текста на сайте. Если поисковый запрос является частью слова, слово дыры должно быть выделено. Пример: ищите «over», затем необходимо выделить «stackoverflow».

Итак, первый шаг - поиск текста с помощью регулярных выражений, чтобы выбрать начало всего слова, и возврат начальной позиции:

var string='over'; //String to search
var pattern= new RegExp("[a-zA-Záéíóäëiöúàèììùüß-]*"+string,'i');
var position = node.data.toUpperCase().search(pattern);

Далее следует вызвать функцию выделения ....

            if (position >= 0)
                return highlight(node, position, string);
            else
                return 0;

... который использовал начальную позицию и обнаруживает последний символ (конечный бит) слова

function highlight(node, position, string){
                var middlebit = node.splitText(position);
                var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/));
[...] next: highlight the word...

Это работает нормально, если вы НЕ используете мутантные гласные, умляуты и так далее. Например: если вы ищете более, все слово «stackoverflow» подсвечивается. Если вы ищете «würstchen» (например, в bratwürstchen), это не сработает. Похоже, что

 var position = node.data.toUpperCase().search(pattern);

или

var middlebit = node.splitText(position);

Не работает с такими специальными символами.

Надеюсь, у кого-нибудь есть идея, как решить эту проблему.

Большое спасибо,

Bndr

1 Ответ

1 голос
/ 07 марта 2011

Чтобы ответить на мой вопрос: После 2 дней «проб и ошибок» и, наконец, написав этот вопрос, я обнаружил пропущенное «i» в этой строке:

var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/));

неверное выражение для поиска конца. так что правильный:

var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/i));

маленькая причина, большое влияние; -)

...