使用正则表达式比较switch语句中的数组元素

时间:2018-06-06 19:25:32

标签: javascript arrays regex

我正在建立一个基本的刽子手'为我妻子的历史课游戏。为此,我创建了一个创建游戏乐队的课程'以字符串和数组格式。

在该类中,我还想创建另一个面向播放器的数组,并根据其输入进行更改。那个数组应该显示一个' *'对于每个字母和一个' _'为每个空间。

我尝试在if或switch语句中使用regex,同时在没有运气的情况下迭代gameWord数组。这是我的基本尝试之一:

class GameWord {
  constructor(word) {
    if ( word.length <= 3 )
      return console.error('Error: Your word must be at least three letters long');

      this.word = word.replace(/[^a-zA-Z\s]/g, ''); 
      this.wordUserView = this.word.toProperCase( );
      this.wordSet = this.wordUserView.split('');

    const len = this.wordSet.length;
    var i = 0;

    this.wordSetHidden = [];
    for ( ; i <= len; i++) {
      if (this.wordSet[i] == /[a-zA-Z]/g) {
    this.wordSetHidden.push("*");
      }
    };
  }
};

这是我尝试过的另一个例子:

var reAlpha = /[a-zA-Z]/;
var reSpace = /\s/;
var arr = ["W", "i", "n", "s", "t", "o", "n", " ", "1", 2, 0];
var newArr = [];

for ( var i = 0; i < arr.length; i++ ) {
  switch (arr) {
    case reAlpha.match:
      newArr.push(arr[i] = "*");
    case reSpace.match:
      newArr.push(arr[i] = "_");
    break;
  default: console.log("No matches")
  };
}

我得到的是&#39;没有匹配&#39;当然,因为没有对数组中的元素进行直接比较。但是,当我尝试做像element.match(arr)这样的事情时,我觉得那个匹配不是一个函数,我猜是因为它将元素作为对象读取而不是字符串?

我知道我可以使用CSS隐藏单个字母,但我希望游戏逻辑能够在后端运行。学生可以轻松改变CSS以获得答案。

谢谢!

2 个答案:

答案 0 :(得分:0)

在这种情况下你应该使用if语句。

如果您想使用开关

var reAlpha = /[a-zA-Z]/;
var reSpace = /\s/;
var arr = ["W", "i", "n", "s", "t", "o", "n", " ", "1", 2, 0];
var newArr = [];

for ( var i = 0; i < arr.length; i++ ) {
  switch (true) {
    case reAlpha.test(arr[i]):
      newArr.push(arr[i] = "*");
    case reSpace.test(arr[i]):
      newArr.push(arr[i] = "_");
    break;
      default: console.log("No matches");
  };
}

如果

var reAlpha = /[a-zA-Z]/;
var reSpace = /\s/;
var arr = ["W", "i", "n", "s", "t", "o", "n", " ", "1", 2, 0];
var newArr = [];

for ( var i = 0; i < arr.length; i++ ) {
  if (reAlpha.test(arr[i]) {
    newArr.push(arr[i] = "*");
  } else if (reSpace.test(arr[i])) {
    newArr.push(arr[i] = "_");
  } else {
    console.log("No matches");
  }
}

答案 1 :(得分:0)

如果您将单词作为字符串,则可以使用带有正则表达式的replace语句将字符替换为&#39; *&#39;和&#39; _&#39;:

的空格
var word = "Winston 120";
var wordToDisplay = word.replace(/[^\s]/g, '*').replace(/[\s]/g,'_');

如果您将单词作为数组,则可以在循环中执行if语句:

var arr = ["W", "i", "n", "s", "t", "o", "n", " ", "1", 2, 0];
var newArr = [];

for ( var i = 0; i < arr.length; i++ ) {
  if(/[^\s]/.test(arr[i])){
    newArr.push(arr[i] = "*");
  } else {
    newArr.push(arr[i] = "_");
  }
}