Javascript/Jquery搜索字符串中是否存在单词
我绝对是个新手,正在尝试一个实践项目。 它基本上是一个字谜游戏,用户点击某些字母组合成一个单词。 我现在需要检查它是否是一个单词。我制作了一个包含字典中所有单词的文本文件(从某人的网站复制,这只是一个练习项目)。我已经设法把它弄到手了,如果我能把这些话记录下来的话Javascript/Jquery搜索字符串中是否存在单词,javascript,jquery,search,Javascript,Jquery,Search,我绝对是个新手,正在尝试一个实践项目。 它基本上是一个字谜游戏,用户点击某些字母组合成一个单词。 我现在需要检查它是否是一个单词。我制作了一个包含字典中所有单词的文本文件(从某人的网站复制,这只是一个练习项目)。我已经设法把它弄到手了,如果我能把这些话记录下来的话 function Searchtext(){ $.get('words.txt', function(data) { console.log(data); }, 'text'); } 现在我想搜索单词,看看玩家
function Searchtext(){
$.get('words.txt', function(data) {
console.log(data);
}, 'text');
}
现在我想搜索单词,看看玩家的答案(在一个名为playeranswer的变量中声明的字符串)是否在列表中。我不需要它返回单词,只需要它是否存在。注意:它必须是精确的,例如,如果用户输入的“ender”不是一个单词,它不会返回真值,因为它找到了单词“render”。也许长点的能帮上忙
我该怎么做呢
谢谢您的帮助。您应该首先解析
数据
变量,并将单词放入数组
。
然后,您可以通过检查数组
是否包含该单词来测试用户输入的单词是否有效
var Dict = new Array("render", "bender", "word");
function isValid(word){
if(Dict.indexOf(word) == -1)
return false; //the word is not valid
return true; //the word is valid
}
您应该首先解析
数据
变量,并将单词放入数组
。
然后,您可以通过检查数组
是否包含该单词来测试用户输入的单词是否有效
var Dict = new Array("render", "bender", "word");
function isValid(word){
if(Dict.indexOf(word) == -1)
return false; //the word is not valid
return true; //the word is valid
}
由于
$.get
是异步的,因此必须对其进行稍微不同的设置。我会这样做:
function Searchtext(name, callback) {
$.get('words.txt', function(data) {
data = data.split("\n");
var contains = (data.indexOf(name) > -1);
callback(contains);
}, 'text');
}
根据文本文件的设置方式,您可能必须将.split(“\n”)
(如果单词在一行上,则将其拆分为一个数组)更改为.split(“”
(如果单词被空格分隔,则将其拆分为一个数组)
你会这样称呼它:
SearchText(playername, function (matched) {
if (matched) {
// Name was in list
} else {
// Name wasn't in list
}
});
演示:
在演示中,我必须模拟AJAX请求。因为
$.get
是异步的,所以您必须对其进行稍微不同的设置。我会这样做:
function Searchtext(name, callback) {
$.get('words.txt', function(data) {
data = data.split("\n");
var contains = (data.indexOf(name) > -1);
callback(contains);
}, 'text');
}
根据文本文件的设置方式,您可能必须将.split(“\n”)
(如果单词在一行上,则将其拆分为一个数组)更改为.split(“”
(如果单词被空格分隔,则将其拆分为一个数组)
你会这样称呼它:
SearchText(playername, function (matched) {
if (matched) {
// Name was in list
} else {
// Name wasn't in list
}
});
演示:
在演示中,我必须模拟AJAX请求。我将为此使用正则表达式(使用
RegExp
对象)。下面是一个简单的示例,它尝试在两个不同的字符串中匹配一个单词:
var word_to_match = 'ender';
var string_of_words = 'a string containing the word ender, this will match';
var second_string_of_words = 'a string that will not produce a match';
//use \b to match on word boundaries
var filter = new RegExp('\\b' + word_to_match + '\\b', 'gi');
if(string_of_words.match(filter)) {
alert('found word: ' + word_to_match);
} else {
alert('did not find word: ' + word_to_match);
}
if(second_string_of_words.match(filter)) {
alert('found word: ' + word_to_match);
} else {
alert('did not find word: ' + word_to_match);
}
如果语句通过,您将看到第一个
,而第二个语句失败。可能需要一些阅读,但您应该能够扩展此示例以适合您的用例。我将使用正则表达式(使用RegExp
对象)来实现此目的。下面是一个简单的示例,它尝试在两个不同的字符串中匹配一个单词:
var word_to_match = 'ender';
var string_of_words = 'a string containing the word ender, this will match';
var second_string_of_words = 'a string that will not produce a match';
//use \b to match on word boundaries
var filter = new RegExp('\\b' + word_to_match + '\\b', 'gi');
if(string_of_words.match(filter)) {
alert('found word: ' + word_to_match);
} else {
alert('did not find word: ' + word_to_match);
}
if(second_string_of_words.match(filter)) {
alert('found word: ' + word_to_match);
} else {
alert('did not find word: ' + word_to_match);
}
如果
语句通过,您将看到第一个,而第二个语句失败。可能需要一些阅读,但您应该能够扩展此示例以适合您的用例。我编写了这个简单的脚本,希望对您有所帮助
$(document).ready(function(e) {
function parseData(data) {
$('#inpu').blur(function() {
var str_to_search = $.trim($('#inpu').val());
if(str_to_search.length) {
var search_res = data.search(str_to_search);
if(search_res != -1) {
alert('Word Valid!');
} else {
alert('Word no valid');
}
}
});
}
$.get('to_search.txt', parseData).fail(function() { alert('error');});
});
我已经制作了这个简单的脚本,希望能有所帮助
$(document).ready(function(e) {
function parseData(data) {
$('#inpu').blur(function() {
var str_to_search = $.trim($('#inpu').val());
if(str_to_search.length) {
var search_res = data.search(str_to_search);
if(search_res != -1) {
alert('Word Valid!');
} else {
alert('Word no valid');
}
}
});
}
$.get('to_search.txt', parseData).fail(function() { alert('error');});
});
供参考。您的目标是每次用户尝试验证单词时都进行服务器调用?为什么不把所有的单词放在javascript变量的第一位呢?你有服务器端编程语言吗?如果是,那么为什么不在服务器端检查并返回true/false呢?这只是一个实践项目,除了我之外没有人会看到它,所以这并不重要。将其放在单独的文本文件中的唯一原因只是为了方便。Regex目前似乎正在发挥作用!我同意@Ejay-将单词解析成数组,然后管理数组上的搜索。-还要练习语法分析!我发现很难找到一个清晰的地方来解释解析:我想清理我的代码,所以如果有人有链接?供参考。您的目标是每次用户尝试验证单词时都进行服务器调用?为什么不把所有的单词放在javascript变量的第一位呢?你有服务器端编程语言吗?如果是,那么为什么不在服务器端检查并返回true/false呢?这只是一个实践项目,除了我之外没有人会看到它,所以这并不重要。将其放在单独的文本文件中的唯一原因只是为了方便。Regex目前似乎正在发挥作用!我同意@Ejay-将单词解析成数组,然后管理数组上的搜索。-还要练习语法分析!我发现很难找到一个清晰的地方来解释解析:我想清理我的代码,这样如果有人有链接?return(!(Dict.indexOf(word)=-1))
或返回Dict.indexOf(word)>-1
返回(!(Dict.indexOf(word)=-1))
或返回Dict.indexOf(word)>-1
如果一个单词后跟逗号怎么办?@sgroves Nopedata
是一个数组,因此indexOf
中使用的值必须与数组中的一项完全匹配。@sgrove从OP中没有多少关于文本文件格式的信息。我想是吧。所以,是的,在不同的场景中,有几种选择,几种事情需要做。嘿,是的,我马上意识到了这一点,并删除了我的评论。我的错。您可能是对的,在这种情况下,单词边界不会是一个问题。@sgroves没问题:)如果它是一个字符串,那么您就完全正确了!如果一个单词后面跟一个逗号怎么办?@sgroves-Nopedata
是一个数组,因此indexOf
中使用的值必须与数组中的一项完全匹配。@sgrove从OP中没有多少关于文本文件格式的信息。我想是吧。所以,是的,在不同的场景中,有几种选择,几种事情需要做。嘿,是的,我马上意识到了这一点,并删除了我的评论。我的错。您可能是对的,在这种情况下,单词边界不会成为问题。@sgroves没问题:)如果是strin