用于识别 guid 或数字的正则表达式

RegEx to identify guid or a number

我有 guid 的正则表达式:

/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i

和匹配数字的正则表达式:

/^[0-9]*$

但我需要匹配一个 guid 或一个数字。有没有办法匹配单个正则表达式。或者我应该分别检查 guid 和 number。

是的,有很多方法可以做到这一点。一种是对 if 语句中的匹配项进行或运算:

var reg1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
var reg2 = /^[0-9]*$/;
var text = " ... ";

if (reg1.test(text) || reg2.test(text)) {
  // do your stuff here
}

另一种方法是ORing in the RegExp本身:

var regex = /(^[0-9]*)|^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
var text = " ... ";

if (regex.test(text)) {
  // do your stuff here
}

在正则表达式中使用 | 来匹配之前或之后的内容:

const re = /^([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})|[0-9]+$/i;
console.log('11111111-1111-1111-8111-111111111111'.match(re)[0]);
console.log('5555'.match(re)[0]);

您可以使用 |两个正则表达式之间的运算符。您可以按以下方式使用它们

/(^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i) | (^[0-9]*$)/