对于Javascript,我是新手。
我想在下面提供的脚本中改进搜索。
我有以下代码,目前当我在搜索中输入短语'blue widgets'时,如果短语'blue widgets'按顺序退出,它将只识别/找到复选框。例如,如果我有一个包含“蓝色小部件”的关键字短语或句子,并且我搜索“蓝色小部件”,则无法找到它,即使蓝色和小部件都存在于我的关键字短语中。
如果我搜索其中包含2个甚至3个单词的短语,那么它可以在我的页面上找到任何关键词短语/句子,其中我的搜索短语的所有单词都存在,然后选中该复选框(代码已经做了)。唯一的条件是我的搜索短语的所有单词都必须存在于句子/字符串中?
如果能找到这个解决方案,我将非常感激。
<html>
<head>
<script type="text/javascript">
function checkForWord( wordField )
{
var form = wordField.form;
var word = wordField.value.replace(/^\s+/,"").replace(/\s+$/,"").toLowerCase();
var inputs = form.getElementsByTagName("input");
for ( var e = 0; e < inputs.length; ++e )
{
var field = inputs[e];
if ( field.type == "checkbox" )
{
if ( field.value.toLowerCase().indexOf(word) >= 0 )
{
field.checked = true;
} else {
// OPTIONAL, if you do NOTwant to clear previously checked boxes, omit next line:
field.checked = false;
}
}
}
}
</script>
</head>
<body>
<form onsubmit="return false;">
Type a word: <input name="word" onchange="checkForWord(this);" />
<hr>
<label>
<input type="checkbox" name="keywords" value="This is an example sentence with blue and cool widgets not in order and my current script will not find it.
</label></br/>
<label>
<input type="checkbox" name="keywords" value="This sentence will be found if I search for blue widgets because its in this sentence">
All work and no play makes Jack
</label></br/>
<label>
<input type="checkbox" name="keywords" value="I would like for it to be able to find this sentence also since blue and widgets both words exist but are out of order.
</label></br/>
</form>
</body>
</html>
答案 0 :(得分:0)
最好对搜索字符串进行标记(用单词分割),独立执行每个搜索(对于每个单词),然后合并结果。
答案 1 :(得分:0)
/(?=.*blue)(?=.*widgets)/.test( phrase );
(?=...)
是一个预测,意味着它只在表达式在字符串中的某个位置匹配时才匹配。好的部分是它不会消耗匹配,所以只有在字符串后面的某个点上有“蓝色”和“小部件”时才会匹配,但顺序无关紧要
如果需要,可以随意修改那些用空格包装的内容,以便它只匹配整个单词(例如用\b
包装单词)
动态生成该正则表达式:
var words = 'blue widgets';
new RegExp( '(?=.*' + words.split( /\W+/g ).join( ')(?=.*' ) + ')', 'i' )