这个正则表达式的意思是什么?

3

我需要弄清楚这个正则表达式的含义是什么?

"^[A-Z]{3}-[4-7]\d{2,4}\$$"

我认为这个词从三个字母开始,以2、3或4个数字结尾(对于双$符号也不确定)。

但我不明白这是什么意思:

     -[4-7]  

我也不确定为什么末尾有两个美元符号。谢谢。

这是基本的正则表达式语法。请查看:regular-expressions.info - ridgerunner
5个回答

11
  • ^ 字符串的开头
  • [A-Z]{3} 重复3次由A到Z的字符组成的字符串
  • - 字符-
  • [4-7] 数字4到7中的一个
  • \d{2,4} 0到9之间任意数字重复2到4次
  • \$ 字符 $
  • $ 字符串的结尾

1
^ = 字符串的开头, $ = 字符串的结尾, [4-7] = 一个数字 - Casimir et Hippolyte
@ridgerunner,所以如果字符串中有换行符,并且设置了m标志,它会查找两次 - 每半个字符串一次,并尝试每次匹配正则表达式?我以前从未使用过m标志,但这就是我刚刚决定解释它的方式。对吗? - Ian
@Ian - $是一个零宽度断言,或者说是锚点,它匹配的是一个位置而非任何字符。通常情况下它只匹配在字符串最后一个字符之后的位置。当设置了m多行标志时,它也会匹配每个换行符\n前面的位置(或者可能是Windows系统中的行终止序列\r\n前面的位置?这个细节不太确定)。你可以试一下! - ridgerunner
@ridgerunner,谢谢您!我现在明白了:
  • 我以为“-[4-7]”是1个表达式,但实际上它是分开的
  • “$”需要反斜杠,因为它是正则表达式中的“特殊”字符
干杯!!
- nclsvh

4

正则表达式 101

前往regex101.com,将正则表达式粘贴到其中...它会为您描述它。这将允许您在浏览器内测试您的正则表达式。

授人以鱼不如授人以渔

正则表达式

/"^[A-Z]{3}-[4-7]\d{2,4}\$$"/

Description

" Literal "
^ Start of string
Char class [A-Z] 3 times [greedy] matches:
    A-Z A character range between Literal A and Literal Z
    - Literal -
Char class [4-7]  matches:
    4-7 A character range between Literal 4 and Literal 7
\d 2 to 4 times [greedy] Digit [0-9]
\$ Literal $
$ End of string
" Literal "

可视化(感谢naomik)由debuggex提供。

正则表达式可视化


2

可视化!

正则表达式可视化

另外,那不是一个正则表达式(RegExp),只是一个字符串。

如果你想把它变成一个正则表达式:

var re = new RegExp("^[A-Z]{3}-[4-7]\\d{2,4}\\$$");

或者只需

var re = /^[A-Z]{3}-[4-7]\d{2,4}\$$/;

那个可视化是从哪里来的?我之前在SO上看到过(或类似的东西),前几天还在寻找那个网站! - Ian

0

-[4-7] 表示字符 - 后跟着数字 4, 5, 67 中的一个。

第一个 $ 被转义了 - 因此它表示输入中的一个$,而第二个 $ 没有被转义,因此它表示字符串的结尾。


0

-:这是减号-字符的字面意思。

[4-7]:一个单独的数字,可以是4、5、6或7。

\$只是转义后的$符号,因此它被解释为文本,而不是作为“字符串结尾”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接