正则表达式仅在非数字时匹配可选字符

时间:2016-10-02 15:45:25

标签: regex

我正在尝试匹配字符串a,其中第一个字符是1-9,接下来的三个字符是0-9。 如果有任何其他字符,则第一个附加字符不能是数字。完整字符串不能包含@字符。

应传递的字符串

  • 1234
  • 1234 5678910
  • 1234AB 12345678
  • 1234stackoverflow
  • 1234 stackoverflow

不应该通过

  • 0123
  • 123
  • 12345
  • 1235 @ 6789
  • ABCDEF

到目前为止,我想出了^[1-9][0-9]{3}(\D)?。但这也传递了12345

任何帮助或指导都将受到高度赞赏:)

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

^[1-9][0-9]{3}([^@0-9][^@]*)?$

如果我正确阅读了您的要求,匹配字符串应以1-9开头,后跟任意数字的3位数字,后跟任何内容,前提是它不是数字或符号。正则表达式中的[^@0-9]是一个负字符类,匹配任何非数字字符而不是at符号。

在这里演示:

Regex101

答案 1 :(得分:1)

使用此^[1-9][0-9]{3}(?:$|[^@\d][^@]*)



console.log('1234'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234 5678910'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234AB 12345678'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234stackoverflow'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1234 stackoverflow'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('0123'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('123'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('12345'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('1235@6789'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));
console.log('ABCDEF'.match(/^[1-9][0-9]{3}(?:$|[^@\d][^@]*)/));




答案 2 :(得分:0)

您可以使用它来获得正确的匹配:

/^[1-9]\d{3}[a-z]*$/i