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 Nope
data
是一个数组,因此
indexOf
中使用的值必须与数组中的一项完全匹配。@sgrove从OP中没有多少关于文本文件格式的信息。我想是吧。所以,是的,在不同的场景中,有几种选择,几种事情需要做。嘿,是的,我马上意识到了这一点,并删除了我的评论。我的错。您可能是对的,在这种情况下,单词边界不会是一个问题。@sgroves没问题:)如果它是一个字符串,那么您就完全正确了!如果一个单词后面跟一个逗号怎么办?@sgroves-Nope
data
是一个数组,因此
indexOf
中使用的值必须与数组中的一项完全匹配。@sgrove从OP中没有多少关于文本文件格式的信息。我想是吧。所以,是的,在不同的场景中,有几种选择,几种事情需要做。嘿,是的,我马上意识到了这一点,并删除了我的评论。我的错。您可能是对的,在这种情况下,单词边界不会成为问题。@sgroves没问题:)如果是strin