我需要弄清楚这个正则表达式的含义是什么?
"^[A-Z]{3}-[4-7]\d{2,4}\$$"
我认为这个词从三个字母开始,以2、3或4个数字结尾(对于双$符号也不确定)。
但我不明白这是什么意思:
-[4-7]
我也不确定为什么末尾有两个美元符号。谢谢。
我需要弄清楚这个正则表达式的含义是什么?
"^[A-Z]{3}-[4-7]\d{2,4}\$$"
我认为这个词从三个字母开始,以2、3或4个数字结尾(对于双$符号也不确定)。
但我不明白这是什么意思:
-[4-7]
^
字符串的开头[A-Z]{3}
重复3次由A到Z的字符组成的字符串-
字符-
[4-7]
数字4到7中的一个\d{2,4}
0到9之间任意数字重复2到4次\$
字符 $
$
字符串的结尾m
标志,它会查找两次 - 每半个字符串一次,并尝试每次匹配正则表达式?我以前从未使用过m
标志,但这就是我刚刚决定解释它的方式。对吗? - Ian$
是一个零宽度断言,或者说是锚点,它匹配的是一个位置而非任何字符。通常情况下它只匹配在字符串最后一个字符之后的位置。当设置了m
多行标志时,它也会匹配每个换行符\n
前面的位置(或者可能是Windows系统中的行终止序列\r\n
前面的位置?这个细节不太确定)。你可以试一下! - ridgerunner前往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 "
可视化!
另外,那不是一个正则表达式(RegExp),只是一个字符串。
如果你想把它变成一个正则表达式:
var re = new RegExp("^[A-Z]{3}-[4-7]\\d{2,4}\\$$");
或者只需
var re = /^[A-Z]{3}-[4-7]\d{2,4}\$$/;
-[4-7]
表示字符 -
后跟着数字 4
, 5
, 6
或 7
中的一个。
第一个 $
被转义了 - 因此它表示输入中的一个$
,而第二个 $
没有被转义,因此它表示字符串的结尾。
-
:这是减号-
字符的字面意思。
[4-7]
:一个单独的数字,可以是4、5、6或7。
\$
只是转义后的$
符号,因此它被解释为文本,而不是作为“字符串结尾”。