我正在尝试按照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
是否存在问题?
答案 0 :(得分:1)
你真的不需要过滤器功能中的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
。