javascript分裂和匹配不起作用(解析可扩展搜索)

时间:2015-05-31 13:33:31

标签: javascript regex parse-platform

我正在尝试按照parse docs实施可扩展搜索。

以下是我正在使用的代码,它几乎从帖子中解除了。

var _ = require("underscore");

Parse.Cloud.beforeSave("Exercises", function (request, response) {
    var Exercise = request.object;

    console.log("Log1" + Exercise.get("exerciseName"));

    var toLowerCase = function (w) {
        return w.toLowerCase();
    };

    var words = Exercise.get("exerciseName").split(/b/);
    words = _.map(words, toLowerCase);

    console.log("Log 2" + words);

    var stopWords = ["the", "in", "and", "with", "on"]
    words = _.filter(words, function (w) {
        return w.match(/^w+$/) && !_.contains(stopWords, w);
    });

    console.log("Log 3" + words);

    var hashtags = Exercise.get("exerciseName").match(/#.+?b/g);
    hashtags = _.map(hashtags, toLowerCase);

    Exercise.set("words", words);
    Exercise.set("hashtags", hashtags);
    response.success();
});

这是我在每个日志中的输出。

记录1:Squats with Dumbells

记录2:squats with dumbells

记录3:

似乎在这一行之后:

words = _.filter(words, function(w) { return w.match(/^w+$/) && ! _.contains(stopWords, w); });

没有返回任何内容。在Log 2中,我预计会给予["squats", "with","dumbells"]

我的Hashtags变量也为空,此代码中的match是否存在问题?

2 个答案:

答案 0 :(得分:1)

Here is a workding JSFiddle with all log statements

你真的不需要过滤器功能中的RegEx。但是,如果您确实想要检查w是否为单词,那么您在RegEx中\之前就错过了w。这按预期工作:

var stopWords = ["the", "in", "and", "with", "on"];

words = _.filter(words, function(w) {
    return w.match(/^\w+$/) && ! _.contains(stopWords, w);
    //               ^ this one
});
console.log(words);    // [ "squats", "dumbells" ]

您的主题标签为空的原因是因为Exercise.get("exerciseName")中没有主题标签。此外,您已经拥有words数组中的所有单词。您可以通过简单地检查第一个字符是否为#来获取所有主题标签:

var hashtags = _.filter(words, function(word) {
    return word.indexOf("#") === 0;
});

答案 1 :(得分:0)

你想用这个做什么?

private void someMethod ()
{
 System.out.println ("Success");
}
@Override
public void paintComponent (Graphics g)
{
 someMethod ();
 repaint ();
}

想想你的正则表达式。 words = _.filter(words, function(w) { return w.match(/^w+$/) && ! _.contains(stopWords, w); }); 正在测试字符串" w",从字符串的开头到结尾重复1次或更多次。 IE:它会匹配" wwww"或" wwwwwwwwwwwwwwwwwww",但不是"深蹲"或者" dumbells"。

我认为你的意思是/^w+$/变量,而不是" w"字符串,但看起来你正试图w match反对w ...使整个匹配基本上成为w