2013-05-14 144 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/

你需要拿出一套固定的,你要允許規則,那麼你可以準備允許的翻譯特殊字符轉換爲正則表達式以使其正常工作。