2013-05-14 4 views
0

Следующий метод выделяет подстроки большой строки. Я хочу поддерживать специальный символ *, который представляет любую строку любой длины. Например, если в текстовое поле поиска вводится *, весь загруженный текстовый файл должен быть выделен. Когда вход становится *a, все слова, которые заканчиваются на 'a', должны быть выделены. 'a' соответствует всем словам, которые содержат a. Однако на данный момент * персонажа даже не подняли. Что я могу сделать, чтобы исправить эту проблему? Спасибо заранее.Специальные символы JavaScript RegExp

function search() { 
    var hid = document.getElementById('hidtxt').value; 
    if(hid.length == 0) hid.value=document.getElementById("input").innerHTML; 
     var text = document.getElementById("searchText").value; 
     if (!text) return; 
     var regex = new RegExp(text, 'gi'); 
      document.getElementById("input").innerHTML = hid.replace(regex, '<span style="background-color:yellow;">$&</span>'); 


    } 

ответ

0

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

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

Другие случаи станут еще более сложными, например. для входной строки blah bla bl bla *837465jfbnrja

.*a будет соответствовать всей строке, а то, что вы, вероятно, после того, чтобы получить blabla и *837465jfbnrja как отдельные матчи (как вы уже выделяя слова)

Чтобы сделать эту работу с регулярным выражением должны были бы быть не жадный соответствие всем, что нЕ является символ пробела:

\b(?:[^\s])*?a\b

Tr у некоторых комбинации из здесь, и вы получите идею:

http://regexpal.com/

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

Смежные вопросы