正则表达式是:
/^\/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+)。数字被捕获到第二个匹配组中