编写重复说明的有效方法

时间:2019-03-15 20:57:45

标签: javascript

我想以一种更有效的方式编写代码的这一部分。

我不知道在这种情况下使用哪种模式:

                l.match(/meite/) && (l = 'meite' + h);
                l.match(/rafael/) && (l = 'rafael' + h);
                l.match(/maicon/) && (l = 'maicon' + h);
                l.match(/player1(?:\.|_)/) && (l = 'player1' + h);
                l.match(/player2(?:\.|_)/) && (l = 'player2' + h);
                l.match(/player3(?:\.|_)/) && (l = 'player3' + h);
                l.match(/player4(?:\.|_)/) && (l = 'player4' + h);
                l.match(/player5(?:\.|_)/) && (l = 'player5' + h);
                l.match(/player6(?:\.|_)/) && (l = 'player6' + h);
                l.match(/player7(?:\.|_)/) && (l = 'player7' + h);
                l.match(/player8(?:\.|_)/) && (l = 'player8' + h);

在这种情况下,什么是好的做法?

3 个答案:

答案 0 :(得分:5)

您可以使用循环遍历每个部分。

// The first set of items
['meite', 'rafael', 'maicon'].forEach(i => l.match(new RegExp(i)) && (l = i + h))

// The second set of items
for(let i = 1; i < 9; i++) {
  l.match(new RegExp(`player${i}(?:\.|_)`) && (l = 'player' + i + h);
}

答案 1 :(得分:3)

最后一部分可以用一个正则表达式完成,以捕获组中玩家的数量。

let m = l.match(/player([1-8])(?:\.|_)/);
if (m) l = 'player' + m[1] + h;

答案 2 :(得分:3)

您可以采用单个正则表达式并采用匹配的值。

var match = l.match(/meite|rafael|maicon|(player[1-8](?:\.|_))/);

if (match) l = match[0] + h;