Поиск и замена строк с кириллическими символами
Подскажите, пожалуйста.
Делаю плагин autocomplete к jQuery. Не получается сделать проверку на вхождение и замену в строках с символами кириллицы. Делаю так: var re = new RegExp('\\b'+text,'gi'); if(str.search(re)) str.replace(re,'<strong>$1</strong>'); где str — текст текущего элемент списка (в цикле обхожу все элементы), text — это текст, содержащийся в поле ввода, т.е. подстрока. С латиницей получается, с кириллицей — нет. Нашёл примерчик регулярного выражения из готового плагина. Сработало! Объясните его, пожалуйста. var re = new RegExp("(?![^&;]+;)(?!<[^<>]*)("+text+")(?![^<>]*>)(?![^&;]+;)",'gi'); Интересует само содержимое выражения. |
У вас в выражении используется спецсимвол \b (граница слова). Реги к сожалению не знают национальных алфавитов, и совпадение всегда будет ложным (как и в случае с \w).
|
Хм.
Но ведь готовые autocomplete'ы правильно выделяют слова по регулярным выражениям. Я не могу понять второго регулярного выражения, которое я нашёл в одном из таких контекстных поисков: var re = new RegExp("(?![^&;]+;)(?!<[^<>]*)("+text+")(?![^<>]*>)(?![^&;]+;)",'gi'); На вскидку, там отсекаются теги и что |
И последовательности, типа
|
Но, по документации, конструкция x(?!y) находит x, если за x не следует y.
Чем является x в первой скобке (?![^&;]+; )? |
Я, кажется, составил подходящую комбинацию и она оказалась неприлично проста:
var re = new RegExp('(^| |\\()('+text+')','i'); if(str.search(re)) str.replace(re,'$1<strong>$2</strong>'); |
Да, действительно, работает как надо.
|
Скажите, пользователь вводит слово с клавиатуры, как это слово найти и заменить в имеющемся тексте?
Проблема в том, что если пользователь введёт символ "/" или "[" или ещё какой-то, то это будет воспринято как спецсимвол регулярного выражения, а мне не нужно этого ничего. Нужно просто заменить один текст на другой. Как это можно сделать? |
Цитата:
RegExp.escape = function(str) { return (str + '').replace(/([?!^$.(){}:|=[\]+\-\/\\*])/g, '\\$1'); }; |
Цитата:
Неужели в javascript нет родных функций замены без регулярных выражений? Ведь если сначала добавлять слёш, а потом обрабатывать регулярными выражениями, то скорости программе это совсем не добавляет. |
Часовой пояс GMT +3, время: 03:38. |