以下方法突出显示大字符串的子字符串。我想要的是支持一个特殊字符*
,它代表任何长度的字符串。例如,如果在搜索文本字段中输入*
,则应突出显示整个加载的文本文件。当输入变为*a
时,应突出显示以“a”结尾的所有单词。 ' a '匹配包含a
的所有字词。但是,目前*
字符甚至没有被拾取。我该怎么做才能解决这个问题?提前谢谢..
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 :(得分:0)
我认为您不能将输入字段直接转换为正则表达式。
星号本身不匹配,因为它必须是.*
才能成为有效的正则表达式。
其他情况将变得更加复杂,例如输入字符串blah bla bl bla *837465jfbnrja
.*a
会匹配整个字符串,而您可能会追求的是将bla
bla
和*837465jfbnrja
作为单独匹配(正如您提到的突出显示字词) 强>)
为了完成这项工作,正则表达式需要与非空白字符的所有内容进行非贪婪匹配:
\b(?:[^\s])*?a\b
在这里尝试一些组合,你会明白这个想法:
您需要提出一组固定的规则,然后您可以准备将允许的特殊字符转换为正则表达式,以使其正常工作。