Jam*_*ner 2 javascript regex capturing-group
我正在尝试将category_id 用作纯数值,这有效。我还需要捕获category_name。对于category_name,我需要捕获直到空格或包含空格(如果它以双引号开头)。
用户输入字符串示例:
python c:192 c:1Stackoverflow c:"Stack Overflow2"
Run Code Online (Sandbox Code Playgroud)
所需的捕获应该是category_name 的这两个值和category_id 的192 值。
预期输出:
1Stackoverflow
Stack Overflow2
Run Code Online (Sandbox Code Playgroud)
Category_name 必须至少包含一位非数字,但可以是全字母且不含数字。
此查询部分有效:
python c:192 c:1Stackoverflow c:"Stack Overflow2"
Run Code Online (Sandbox Code Playgroud)
它不捕获输入1Stackoverflow,但捕获引用的输入。我需要删除引号:
1Stackoverflow
Stack Overflow2
Run Code Online (Sandbox Code Playgroud)
这?!\d+是一种避免与category_id发生冲突的尝试,但似乎不起作用。
如何以两种形式(一个单词和引号分隔)捕获category_name,而不在捕获中使用引号并使用前导数字?
要在一个正则表达式中捕获所有 3 个命名组,请使用:
c:(?:(?<category_id>\d+\b)|("?)(?<category_name>(?:[^"\s]+|[^"]+))\2)
Run Code Online (Sandbox Code Playgroud)
正则表达式细分:
c:: 匹配c:(?::启动非捕获组
(?<category_id>\d+\b):命名捕获组category_id匹配 1 个以上数字,后跟字边界|: 或者("?):匹配"或空字符串并在组 #2 中捕获(?<category_name>[^"\s]+|[^"]+):命名捕获组category_name匹配 1 个以上非空格和非双引号字符或 1 个以上非双引号的任何字符\2:匹配与我们在第 2 组中捕获的文本相同的文本,该文本是一个"字符串或空字符串):结束非捕获组