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

你需要拿出一套固定的,你要允许规则,那么你可以准备允许的翻译特殊字符转换为正则表达式以使其正常工作。