我的javascript出错了哪里?

时间:2014-10-11 05:29:29

标签: javascript jquery regex

我是JS和正则表达式的新手。我希望有人可以帮我解决我遇到的问题。

所以在我的代码中,我想要发生的是在自己的索引(here's a link to the .txt file I am reading from)中使用英语中的每个单词获取一个数组。到目前为止,我有这个:

$(document).ready(function(){
    var allWords;
    function getAllWords(list) {
        $.get("wordlist.txt", function (words) {
            var re = "/\w+$/m"
            list = words.split(re);
            console.log(list);
        });
    }
    getAllWords(allWords);
    console.log(allWords);
});

但它没有在自己的索引中包含每个单词,而是返回一个包含一个索引中所有单词的数组。任何人都可以告诉我哪里出错了/指向正确的方向吗?如果需要,我可以澄清更多。

提前致谢!

3 个答案:

答案 0 :(得分:2)

一些问题:

  • 正则表达式字面值不需要引用var re = "/\w+$/m";
  • 正则表达式本身是错误的,应该var re = /\s+/;将一行分成白色空格上的单词。

更新:: 更新了可能修复的代码:

re = /\s+/g;
$(document).ready(function() {    
    function getAllWords() {
        $.get("wordlist.txt", function (response) {
            var allWords = response.split(re);
            console.log( allWords );
        });
    }    
});

答案 1 :(得分:1)

您的代码存在多个问题:

  1. 正则表达式错误。
  2. 将未定义的参数传递给getAllWords(),并以某种方式预期结果最终会出现在该变量中。
  3. $.get()是异步的,所以你不能在下一行代码中使用它的结果。
  4. 这是一种可行的方法。这会修复正则表达式并添加一个在数据可用时调用的回调参数:

    $(document).ready(function(){
        function getAllWords(fn) {
            $.get("wordlist.txt", function(data) {
                var words = data.split(/\s+/);
                fn(words);
            });
        }
        getAllWords(function(words) {
            console.log(words);
        });
    });
    

    或者,使用jQuery promises(这是我处理异步操作的首选方式):

    $(document).ready(function(){
        function getAllWords(fn) {
            return $.get("wordlist.txt").then(function(data) {
                return data.split(/\s+/);
            });
        }
        getAllWords.then(function(words) {
            console.log(words);
        });
    });
    

答案 2 :(得分:0)

从正则表达式中删除美元符号。这样做:var re = /\w+/m;