在javascript中,根据英语词典检查字符串变量中的项

在javascript中,根据英语词典检查字符串变量中的项,javascript,Javascript,我有下面的函数,它从所有英文字母的数组中随机选择字母(加空格,加),并将它们存储在字符串变量中 该函数有一个生成2500个随机字符的循环。我想检查两个空格之间的字母序列(即“或空格和回车符”(“或)或两个构成合法的英语单词) 我该怎么做?特别是 我需要下载英语词典吗 如何将所有字符串与它进行比较 保留合法的词语?以下是 功能 JS function statement() { var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "

我有下面的函数,它从所有英文字母的数组中随机选择字母(加空格,加

),并将它们存储在字符串变量中

该函数有一个生成2500个随机字符的循环。我想检查两个空格之间的字母序列(即“或空格和回车符”(“或

)或两个

构成合法的英语单词)

我该怎么做?特别是

  • 我需要下载英语词典吗
  • 如何将所有字符串与它进行比较
  • 保留合法的词语?以下是 功能
  • JS

    function statement() {
        var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "<br/>"];
        for (var i = 0; i <= 2500; i++) {
            var random_letter = Math.floor(Math.random() * letters.length);
            result += letters[random_letter];
        }
        document.getElementById("random1").innerHTML += result;
    }
    
    function语句(){
    变量字母=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”、“M”、“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”、“X”、“B”、“X”、“X”、“X”、“X”、“X”等];
    对于(var i=0;i首先:你需要一个单词列表。如果你使用Unix操作系统,你很可能在
    /usr/share/dict/words
    中有一个中等大小的单词列表,但是你会在网上找到很多,一个简短的搜索给出了大约10万个单词。这些单词已经被排序,所以你可以将它们逐字放入
    数组中。因为它是排序的您可以使用快速二进制搜索进行搜索

    你在空格和换行符之间寻找单词,但是如果
    word
    word2 word3
    算作
    word,word2,word3
    word,word2 word3
    那么
    word2 word3
    将是一种句子,这就有点含糊不清了。我假设第一种变体:单字,为了简单起见,从现在开始就没有句子

    在生成字符串的循环中,我将检查每个生成的字符是否为空格/换行符,获取迄今为止生成的字符串并对照字典进行检查

    如果您坚持只处理最终生成的字符串,则必须将其拆分为单个单词,可能需要使用正则表达式,因为这里很简单:

    var s = ("word1   word2<br/>  <br/><br/> word3   <br/>").replace(/<br[/]>/g,"").split(/[\s]+/);
    s.join(",");
    //word1,word2,word3,
    //              the ^ last one is empty
    
    这里使用键作为值。实际值在本例中是浪费的,但您可以使用它们进一步细化,例如:标记名词、动词、形容词等。您不限于数字,当然,您可以使用所有内容,甚至可以使用该词的完整词典条目(甚至包括图片和音乐,但这是另一个故事).

    这是使用node js实现的工作代码 1) 是的,你必须下载单词,我使用请求模块从url获取它们

    基本上,您必须使用正则表达式将该网站中的单词列表拆分为一个数组,并使用另一个正则表达式将随机生成的字符串拆分。然后,您执行for循环来遍历每个单词,一次一个,将每个真实单词与每个生成的单词进行比较。如下所示:

    var request = require("request");
    
    
    
    request("http://www.math.sjsu.edu/~foster/dictionary.txt", function(err,status, resp){
    
            var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "<br/>"];
    
            letters = letters.map(function(letter){ return letter.toLowerCase()});
            //console.log(wordsArr);
            var result = "";
            var c = 0;
            for (var i = 0; i <= 10000; i++) {
                var random_letter = Math.floor(Math.random() * letters.length);
                result += letters[random_letter];
                c++;
            }
    
            if(c >= 2500){
                var randomResultArr = result.split(/<br\/>|<br\/><br\/>|\s/);
                console.log(randomResultArr);
                var matchesArr = getWordMatches(wordsArr = resp.split("\n"), result.split(/<br\/>|<br\/><br\/>|\s/));
                console.log("MATCHES: " + matchesArr);
            }
    
    });
    
    
        function getWordMatches(wordsArr, resultArr){
        var matchesArr = [];
    
        console.log("WORDSARR ", wordsArr.length);
        console.log("RES ARR ", resultArr.length);
    
    
        for(var i = 0; i < wordsArr.length; i++ ){
            for(var x = 0; x < resultArr.length; x++){
    
                if( (wordsArr[i] === resultArr[x]) && wordsArr[i] !== "" ){
                    matchesArr.push(wordsArr[i]);
                    console.log("WORD MATCH : " + wordsArr[i]);
                }
            }
        }
    
        return matchesArr;
    
    
    
    } 
    

    对不起,我放了“
    ”在我的评论中,它似乎创造了硬回报。因此,我再次提出了我的问题:谢谢,这真的很棒。从我在你的代码中看到的,我实际上不必下载英文数据库。我可以直接将程序转到他们的服务器并检查我的随机字符串,对吗?是的,如果你愿意,你可以通过http请求下载数据导航到代码中的URL,你看到的就是下载的内容,它下载它并将其存储为变量,而实际上它不会将其保存到文件或任何东西中。请求完成后,可以根据随机字符串检查它Hank you deamentiaemundi
    var request = require("request");
    
    
    
    request("http://www.math.sjsu.edu/~foster/dictionary.txt", function(err,status, resp){
    
            var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "<br/>"];
    
            letters = letters.map(function(letter){ return letter.toLowerCase()});
            //console.log(wordsArr);
            var result = "";
            var c = 0;
            for (var i = 0; i <= 10000; i++) {
                var random_letter = Math.floor(Math.random() * letters.length);
                result += letters[random_letter];
                c++;
            }
    
            if(c >= 2500){
                var randomResultArr = result.split(/<br\/>|<br\/><br\/>|\s/);
                console.log(randomResultArr);
                var matchesArr = getWordMatches(wordsArr = resp.split("\n"), result.split(/<br\/>|<br\/><br\/>|\s/));
                console.log("MATCHES: " + matchesArr);
            }
    
    });
    
    
        function getWordMatches(wordsArr, resultArr){
        var matchesArr = [];
    
        console.log("WORDSARR ", wordsArr.length);
        console.log("RES ARR ", resultArr.length);
    
    
        for(var i = 0; i < wordsArr.length; i++ ){
            for(var x = 0; x < resultArr.length; x++){
    
                if( (wordsArr[i] === resultArr[x]) && wordsArr[i] !== "" ){
                    matchesArr.push(wordsArr[i]);
                    console.log("WORD MATCH : " + wordsArr[i]);
                }
            }
        }
    
        return matchesArr;
    
    
    
    } 
    
    WORDSARR  349901
    RES ARR  747
    WORD MATCH : giros
    WORD MATCH : goad
    WORD MATCH : kaqa
    WORD MATCH : lome
    WORD MATCH : mibs
    MATCHES: giros,goad,kaqa,lome,mibs