【问题标题】:RegEx to identify guid or a number正则表达式来识别 guid 或数字
【发布时间】:2018-09-30 17:23:46
【问题描述】:
我有 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。
【问题讨论】:
标签:
javascript
regex
match
guid
【解决方案1】:
是的,有很多方法可以做到这一点。一种是对 if 语句中的匹配项进行 OR:
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
}
【解决方案2】:
在正则表达式中使用| 来匹配之前或之后的内容:
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]);
【解决方案3】:
您可以使用 |两个正则表达式之间的运算符。您可以按如下方式使用它们
/(^[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]*$)/