【问题标题】:Javascript / Jquery Search if a word exists in a stringJavascript / Jquery 搜索字符串中是否存在单词
【发布时间】:2013-04-25 20:49:54
【问题描述】:

我绝对是一个新手,正在尝试一个练习项目。 它基本上是一个字谜游戏,用户点击某些字母来组合一个单词。 我现在需要检查它是否真的是一个词。我制作了一个包含字典中所有单词的文本文件(从某人的网站复制,作为一个练习项目)。我已经设法得到它,如果我可以 console.log 的话。

function Searchtext(){
    $.get('words.txt', function(data) {
console.log(data);



}, 'text');
    }

现在我想搜索单词以查看玩家的答案(在名为 playeranswer 的变量中声明的字符串)是否在列表中。我不需要它来返回这个词,只需要它是否存在。注:它必须是准确的,例如,如果用户输入了不是单词的“ender”,它不会返回真实,因为它找到了“render”这个词。也许带有 .length 的东西会有所帮助?

我该怎么做呢?

感谢您的帮助。

【问题讨论】:

  • Regex docs 供参考。
  • 您的目标是每次用户尝试验证单词时都进行一次服务器调用?为什么不把所有的词都放在 javascript 变量中呢?你有任何服务器端编程语言吗?如果是,那么为什么不检查服务器端并返回真/假?
  • 它只是一个练习项目,除了我之外没有人会看到它,所以这并不重要。它在单独的文本文件中的唯一原因只是为了方便。正则表达式目前似乎正在工作!
  • 我同意@Ejay - 将单词解析成一个数组,然后管理数组上的搜索。 - 也练习解析!
  • 我发现很难找到清楚解释解析的地方:我想清理我的编码,所以如果有人有链接?

标签: javascript jquery search


【解决方案1】:

由于$.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
    }
});

演示: http://jsfiddle.net/Fkr5B/

在演示中,我必须模拟 AJAX 请求。

【讨论】:

  • 如果一个单词后面跟着一个逗号怎么办?
  • @sgroves 不。 data 是一个数组,因此indexOf 中使用的值必须与数组中的某个项目完全匹配。
  • @sgroves OP 没有太多关于文本文件格式的信息。我假设。所以是的,有几个选项,几件事,需要在不同的场景中完成。
  • 嘿,是的,我立即意识到这一点并删除了我的评论。我的错。您可能是对的,在这种情况下单词边界不会成为问题。
  • @sgroves 没问题 :) 如果它是一个字符串,那么你绝对正确!
【解决方案2】:

我会为此使用正则表达式(使用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);
}

您会看到第一个 if 语句通过,而第二个语句失败。可能需要阅读一些内容,但您应该能够扩展此示例以适合您的用例。

【讨论】:

  • 谢谢,我用了 '\\b' + playeranswer + '\\b', 'gi' 效果很好!
【解决方案3】:

您应该首先解析data 变量并将单词放入Array。 然后,您可以通过检查您的Array 是否包含该单词来测试用户是否输入了该单词。

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
}    

【讨论】:

  • return (!(Dict.indexOf(word) == -1));
  • return Dict.indexOf(word) > -1
【解决方案4】:

我已经制作了这个简单的脚本,希望对您有所帮助

$(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');});
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2018-02-08
    • 2016-04-26
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多