我想捕获一个符合条件的字符串:
可能为空
如果不为空,则最多必须包含三位数(-> \d{1,3}
)
[A-Z]?
)/
)(-> \/?
);如果后跟正斜杠,则必须为一到三位数字
(-> \d{1,3}
)有效输入:
此处输入无效:
我提出了满足条件1-3的以下^\d{0,3}[A-Z]{0,1}/?[1,3]?$。我该如何处理4种情况?我的正则表达式在两种情况下失败:
77A/7
77/
答案 0 :(得分:3)
您可以使用
/^(?:\d{1,3}[A-Z]?(?:\/\d{1,3})?)?$/
请参见regex demo
详细信息
^
-字符串的开头(?:\d{1,3}[A-Z]?(?:\/\d{1,3})?)?
-可选的非捕获组:
\d{1,3}
-1-3位数字[A-Z]?
-可选的大写ASCII字母(?:\/\d{1,3})?
-可选的非捕获组:
\/
-一个/
字符\d{1,3}
-1到3位数字$
-字符串的结尾。视觉图表(生成的here):
答案 1 :(得分:0)
这应该有效。您要匹配一个可选的斜杠,然后匹配一个从1到3的可选数字;这匹配斜杠和1-3的任意数字的可选组合。另外,您的原始正则表达式开头可以匹配0位数字;我相信这是错误的,所以我解决了这个问题。
var regex = /^(\d{1,3}[A-Z]{0,1}(\/\d{1,3})?)?$/g;
console.log("77A/7 - "+!!("77A/7").match(regex));
console.log("77/ - "+!!("77/").match(regex));
console.log("35 - "+!!("35").match(regex));
console.log("35A - "+!!("35A").match(regex));
console.log("35A/44 - "+!!("35A/44").match(regex));
console.log("35/44 - "+!!("35/44").match(regex));
console.log("34/ - "+!!("34/").match(regex));
console.log("A/3 - "+!!("A/3").match(regex));
console.log("[No string] - "+!!("").match(regex));