Javascript 如何使此正则表达式的最后一部分成为可选的?
我循环浏览页面上的所有链接,并根据以下模式匹配它们的href值:Javascript 如何使此正则表达式的最后一部分成为可选的?,javascript,regex,Javascript,Regex,我循环浏览页面上的所有链接,并根据以下模式匹配它们的href值: ([^/]+)/([0-9]+)/([^/]+) 问题是页面上有两种类型的链接格式: 1. /video/123/slug 2. /video/123 第一。使用上面的正则表达式可以很好地捕获,但第二个正则表达式失败。我想让正则表达式的第三部分(slug)成为可选的,这样当匹配正则表达式时,两种链接格式都返回true。如何做到这一点?使用?量词,这使您的模式成为可选模式。它与模式的0或1次匹配 此外,您需要将最后一个斜杠和正则
([^/]+)/([0-9]+)/([^/]+)
问题是页面上有两种类型的链接格式:
1. /video/123/slug
2. /video/123
第一。使用上面的正则表达式可以很好地捕获,但第二个正则表达式失败。我想让正则表达式的第三部分(slug)成为可选的,这样当匹配正则表达式时,两种链接格式都返回true。如何做到这一点?使用
?
量词,这使您的模式成为可选模式。它与模式的0或1次匹配
此外,您需要将最后一个斜杠和正则表达式的最后一部分组合在一个非捕获组中
([^/]+)/([0-9]+)(?:/([^/]+))?
如果您添加了一个
?
,则应使模式的最后一部分成为可选的 将最后一位放在非捕获组的括号中,并添加:
您好,
?:
在这个表达式中起什么作用?谢谢,托马斯。这是针对非捕获组的。因此,将?:
放在任何一组()
的开头将使结果无法用于以后引用它捕获的内容?这是否意味着它是不必要的?当您知道以后不会引用它时,这是标准的方法吗?多谢了,托马斯。是的,就是这样。它不会在任何组中被捕获。所以这只是一种节省内存的方法,还是什么?
([^/]+)/([0-9]+)(?:/([^/]+))?