繁体   English   中英

匹配第 n 个字符之前和之后的组

[英]Match group before nth character and after that

我想匹配第 n 个字符之前的所有内容(第一个字符除外)及其之后的所有内容。 所以对于下面的字符串

/firstname/lastname/some/cool/name

我要搭配

Group 1: firstname/lastname
Group 2: some/cool/name

使用以下正则表达式,我快到了,但我找不到正确的正则表达式来正确匹配第一组并忽略第一个 /:

([^\/]*\/){3}([^.]*)

请注意,我总是想匹配第三个正斜杠。 之后的所有字符都可以是 URL 中有效的任何字符。

您的正则表达式组没有给出正确的结果,因为([^\\/]*\\/){3}您正在重复捕获的组,这将覆盖先前匹配的组Read this

您可以使用

^.([^/]+\/[^/]+)\/(.*)$

在此处输入图片说明

 let str = `/firstname/lastname/some/cool/name` let op = str.match(/^.([^/]+\\/[^/]+)\\/(.*)$/) console.log(op)

量词{3}重复捕获组 3 次,这将具有最后一次迭代的值。

第一次迭代将匹配/ ,第二个firstname/和第三个(最后一次迭代) lastname/这将是组的值。

第二组捕获匹配[^.]* ,它将匹配 0+ 而不是不考虑数据结构的文字点。

如果要匹配完整模式,可以使用:

^\/([^\/]+\/[^\/]+)\/([^\/]+(?:\/[^\/]+)+)$

解释

  • ^字符串开始
  • (捕获组 1
  • )关闭群组
  • \\/匹配/
  • (捕获组 2
    • [^\\/]+匹配 1+ 次而不是/
    • (?:\\/[^\\/]+)+重复 1+ 次匹配/和 1+ 次不匹配/以匹配字符串其余部分的模式。
  • )关闭群组
  • $字符串结尾

正则表达式演示

忽略第一个/ ,然后捕获前两个单词,然后捕获/之后的其余短语。

^(:?\/)([^\/]+\/[^\/]+)\/(.+)

查看示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM