下面你会看到我正在使用的javascript / jQuery函数:
var forward = new RegExp('forward'),
backward = new RegExp('backward'),
left = new RegExp('left'),
right = new RegExp('right');
if ( tweet.message.match(forward) ) {
console.log('forward');
body.addClass('forward');
bodyRemoveClass();
}
if ( tweet.message.match(backward) ) {
console.log('backward');
body.addClass('backward');
bodyRemoveClass();
}
if ( tweet.message.match(left) ) {
console.log('left');
body.addClass('left');
bodyRemoveClass();
}
if ( tweet.message.match(right) ) {
console.log('right');
body.addClass('right');
bodyRemoveClass();
}
一切都很好,但我对它的编写方式并不是百分之百满意。
基本上它的作用是,检查给定的关键字(向前,向后,向左或向右)
在推文中(tweet.message)
我想知道是否有一种简单/清洁的方法来实现这一点。
很抱歉,但没有在线示例...
谢谢
答案 0 :(得分:4)
此处无需match()
与Regexp
一起使用。您可以使用indexOf()
进行简单的字符串匹配。然后,您可以避免在开头声明所有Regexp
。
if ( tweet.message.indexOf("forward") > -1) {
console.log('forward');
body.addClass('forward');
bodyRemoveClass();
}
if ( tweet.message.indexOf("backward") > -1) {
console.log('backward');
body.addClass('backward');
bodyRemoveClass();
}
if ( tweet.message.indexOf("left") > -1) {
console.log('left');
body.addClass('left');
bodyRemoveClass();
}
if ( tweet.message.indexOf("right") > -1) {
console.log('right');
body.addClass('right');
bodyRemoveClass();
}
然而,使用一系列类更完美地实现了这一点:
// Store your 4 classes in an array
var classes = ["forward","backward","left","right"];
for (var i = 0; i<classes.length; i++) {
// Check each class appearing in the message:
if ( tweet.message.indexOf(classes[i]) > -1) {
console.log(classes[i]);
body.addClass(classes[i]);
bodyRemoveClass();
}
}
答案 1 :(得分:4)
您可以使用这样的表驱动方法:
var tags = ["forward", "backward", "left", "right"];
for (var i = 0; i < tags.length; i++) {
if (tweet.message.indexOf(tags[i]) != -1) {
body.addClass(tags[i]);
bodyRemoveClass();
}
}
请记住,只要您反复重复相同的逻辑和相同的字符串,就应该找到一种方法来通过迭代表来驱动逻辑,将代码分解为一个共同的功能或某些东西阻止您反复重复代码。如今,软件开发中流行的术语是DRY
(不要重复自己)。
也没有理由用正则表达式测试每个人的匹配。虽然它们在需要时非常方便,但只需要.indexOf()
就可以快得多。
答案 2 :(得分:3)
function TweetMatch(classToAdd){
if ( tweet.message.match(new RegExp(classToAdd))) {
console.log(classToAdd);
body.addClass(classToAdd);
bodyRemoveClass();
}
}
TweetMatch('forward');
TweetMatch('backward');
TweetMatch('left');
TweetMatch('right');
等。 (我看到其他评论者已经走了进去,让阵列迭代......取决于你想要多少方向:-D)
答案 3 :(得分:1)
通过捕获匹配的短语可以大大缩短这一点:
var match = tweet.message.match(/forward|backward|left|right/g);
for (var i = 0; match && i < match.length; i++) {
console.log(match[i]);
body.addClass(match[i]);
bodyRemoveClass();
}
每个if
块中唯一不同的是要匹配的短语(与要添加的类的名称相同)。这样的重复可以(而且应该)几乎总是可以避免。
答案 4 :(得分:1)
var directions = new Array('forward', 'backward', 'left', 'right');
$(directions).each(function()
{
var regX = new RegExp(this);
if (tweet.message.match(regX))
{
console.log(this);
body.addClass(this);
bodyRemoveClass();
}
});