正则表达式是:
/^\/node?(?:\/(\d+)(?:\.\.(\d+))?)?/
我可以理解,/
开头和结尾都是正则表达式分隔符,也适用于以What'staking after that beats me^\/node
开头的字符串!/node
正则表达式是:
/^\/node?(?:\/(\d+)(?:\.\.(\d+))?)?/
我可以理解,/
开头和结尾都是正则表达式分隔符,也适用于以What'staking after that beats me^\/node
开头的字符串!/node
您应该考虑获得像 RegexBuddy 这样的工具。它将解释给定正则表达式中的所有内容,以及它如何编译和如何分支。
假设 PCRE 或类似:
/ //begin
^ //start of string
\/ //literal /
node? //I assume node is optional, normally it'd be (node)?
//? makes the previous expression optional
(
?: //non-capturing group (think of it like dont capture <this>)
\/ //literal /
(\d+) // one or more digits, 0-9
(
?: // another non-capturing group
\.\. // literal ..
(\d+) // one or more digits 0-9
)
? // optional once more
)
? // make the previous group optional
/ // end
?
这之后的任何内容都是“可选的”
(?:
非捕获组
\/
逃脱 /
(\d+)
- 超过 1 位 - 也在捕获组“()”中
(?:
再次
\.
- 逃脱。
\.
- 再次
(\d+)
- 和之前一样
)?)?
- 不确定 - 这是什么风格的正则表达式?
你是对的/
,一开始是模式分隔符。为简单起见,让我们删除那些
^\/node?(?:\/(\d+)(?:\.\.(\d+))?)?
这(?:...)
是一个非捕获组。这是一个没有被抓进匹配组的组。这是一个优化,让我们删除?:
以使模式更清晰。
^\/node?(\/(\d+)(\.\.(\d+))?)?
The\
是一个转义字符,所以\/
实际上只是一个/
,但是因为它们表示模式的开始和结束,所以需要转义。匹配(几乎)任何字符,.
因此也需要对其进行转义。
使?
后退模式可选,因此()?
意味着括号中的任何内容出现零次或一次。
^
表示字符串的开始\/node?
匹配/node
或/nod
\/(\d+)
匹配/
后跟一个或多个数字 (the \d+
)。数字被捕获到第一个匹配组中(\.\.(\d+))?
匹配..
后跟一个或多个数字 (the \d+
)。数字被捕获到第二个匹配组中