如果前面有可选字符,我该如何强制某些字符出现?

时间:2018-12-20 14:49:06

标签: javascript regex

我想捕获一个符合条件的字符串:

  1. 可能为空

  2. 如果不为空,则最多必须包含三位数(-> \d{1,3}

  3. 可以选择后面跟一个大写字母([A-Z]?
  4. 可以在
  5. 后面加上正斜杠(即/)(-> \/?);如果后跟正斜杠,则必须为一到三位数字 (-> \d{1,3}

有效输入:

  • 35
  • 35A
  • 35A / 44

此处输入无效:

  • 34 /(请注​​意,“ /”后没有数字)

我提出了满足条件1-3的以下^\d{0,3}[A-Z]{0,1}/?[1,3]?$。我该如何处理4种情况?我的正则表达式在两种情况下失败:

  • 在有数字,正斜杠和数字(例如。77A/7
  • )时无法匹配
  • 匹配,但是当有数字和正斜杠时(例如, 77/

2 个答案:

答案 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):

enter image description 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));