正则表达式匹配否定可选组

Regex match negative optional group

我正在尝试匹配 MenuSearchUser 的出现次数:

/MenuSearch?action=read
/User

以下正则表达式匹配第一种情况:

/\/(.*)(?=\?)/g

但不匹配 User,因为它们在您的行中没有 ? 字符。我怎样才能使第二个正则表达式组成为可选的?

在线查看: https://regex101.com/r/qU6hN6/2

您可以使用这个基于否定的正则表达式:

/^\/([^?]+)/gm

Updated RegEx Demo

如果您只需要查找单词字符,也可以使用 \w 元字符。

\/(\w+)/g

/\/([^?^\n]*)(\?.*)?/g

这会抓住一个正斜杠 \/ ,然后是任意数量的非? non-newline 个字符,([^?^\n]*),可选地后跟问号,后跟任意数量的字符,(\?.*)?

第一个捕获组是菜单项,第二个捕获组是查询。