【问题标题】:Tricky RegExp question? How would I do this? [closed]棘手的正则表达式问题?我该怎么做? [关闭]
【发布时间】:2020-03-12 19:10:25
【问题描述】:

我想要一个简单的验证 <word must be Locate with length 6,SPACE,1 length integer,COMMA, 1 length integer,COMMA, 1 word must be either UP, DOWN, LEFT, RIGHT> 并且单词的大小写无关紧要。我该怎么做?最好我想使用 RegExp 来执行此操作,并且我将拥有一个字符串数组。 即)LOCaTe 9,0,uP

我有一个简单的数组 ["Locate", "9", "," ,"4", "up"] 。该数组将起作用。如果我有一个像 ["Locate"," asdf", "9", "," ,"4", "up"] 这样的数组,那么该数组将不起作用。它必须是一个字符串,然后是数字,然后是逗号,然后是数字,然后是字符串。

【问题讨论】:

  • 忘记密码了吗?我们不知道你想做什么!
  • 你能给我们更多的例子吗?
  • 放松一下,我更新了,请帮忙。

标签: javascript regex frontend regexp-replace


【解决方案1】:

我猜这里可能不需要正则表达式,您可以使用类似于以下的方法编写脚本:

function check(arr = arr) {
	if (arr.length !== 5) {
		return false;
	}

	if (arr[0].toLowerCase() !== 'locate') {
		return false;
	}


	if (parseInt(arr[1]) === NaN || parseInt(arr[3]) === NaN) {
		return false;
	}

	if (arr[2] !== ',') {
		return false;
	}

	if (arr[4].toLowerCase() === 'up' || arr[4].toLowerCase() === 'left' || arr[4].toLowerCase() === 'right' || arr[4].toLowerCase() === 'down') {
		return true;
	} else {
		return false;
	}

	return true;
}

arr = ["Locate", "9", ",", "4", "UP"]
console.log(check(arr))

如果你必须写一个表达式,那么可能类似于:

^\[\s*"locate"\s*,\s*"\d"\s*,\s*"\s*,"\s*,\s*"\d"\s*,\s*"(?:up|down|right|left)"\s*\]$

调查一下可能没问题。

const regex = /^\[\s*"locate"\s*,\s*"\d"\s*,\s*"\s*,"\s*,\s*"\d"\s*,\s*"(?:up|down|right|left)"\s*\]$/gmi;
const str = `["Locate", "9", "," ,"4", "up"]
["LOCATE" , "8" , "," , "4", "down"]
["LoCATE" , "3" , "," , "0", "right"]
["LoCate" , "2" , "," , "5", "left"]
["LoCate" , "21" , "," , "5", "left"]`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

如果您希望简化/修改/探索表达式,在regex101.com 的右上角面板中已对此进行了说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入匹配。


正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

    【解决方案2】:

    你可以先将数组转换成字符串(使用join()),然后用regExp检查字符串。

    function isValidArray(arr) {
      let str = arr.join(';');
      return (new RegExp(/(locate);\d;,;\d+;((up)|(down)|(left)|(right))/gi)).test(str)
    }
    
    const arr1 = ["Locate", "9", "," ,"4", "up"];
    const arr2 = ["Locate"," asdf", "9", "," ,"4", "up"] ;
    
    console.log(isValidArray(arr1)); // return true
    console.log(isValidArray(arr2)); // return false

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多