Javascript 用于分析GitHub分支ref的正则表达式
我真的很难用一个正则表达式来解析一个GitHub回购名称和分支引用的发行号。我看到了一种方法,我可以用3个或4个正则表达式和相当数量的代码来解析,但我更喜欢1,特别是因为我觉得已经做了类似的事情。我玩了一段时间,似乎没能达到目的 此正则表达式适用于第一组测试字符串:Javascript 用于分析GitHub分支ref的正则表达式,javascript,regex,github-api,Javascript,Regex,Github Api,我真的很难用一个正则表达式来解析一个GitHub回购名称和分支引用的发行号。我看到了一种方法,我可以用3个或4个正则表达式和相当数量的代码来解析,但我更喜欢1,特别是因为我觉得已经做了类似的事情。我玩了一段时间,似乎没能达到目的 此正则表达式适用于第一组测试字符串:/(\S+\/\S+)?(\d+)/i 这个正则表达式是我在第二组中的最佳尝试,但不起作用:/(124;-|^)?(\ d+)(124;-|$)?/。如果第二个有效,我甚至会很好,然后我就可以分别运行这两个程序,但似乎无法实现 这是我
/(\S+\/\S+)?(\d+)/i
这个正则表达式是我在第二组中的最佳尝试,但不起作用:
/(124;-|^)?(\ d+)(124;-|$)?/
。如果第二个有效,我甚至会很好,然后我就可以分别运行这两个程序,但似乎无法实现
这是我需要的。下面是一些测试字符串和注释后的所需匹配组
'ex-owner/ex.repo#28' // 1: ex-owner/ex.repo, 2: #28
'#28' // 1: null, 2: #28
'other>owner/repo#28stuff' // 1: owner/repo, 2: #28
'other#39stuff' // 1: null, 2: #28
'dont/match39me' // no match
'123' // 1: null, 2: 123
'123myfeature' // 1: null, 2: 123
'myfeature456' // 1: null, 2: 456
'blah-123 ok' // 1: null, 2: 123
'ok123-blah' // 1: null, 2: 123
'ok123_blah' // 1: null, 2: 123
'blah_123ok' // 1: null, 2: 123
'not82valid' // no match
'not.82.valid' // no match
非常感谢你的帮助。我不会说我是regex的新手,因为我已经用一个regex为一种简单的语言编写了一个标记器,但绝对不是专业人士。如果我也走错了方向,请告诉我
干杯 /^(?:(\S+\/\S+)(\d+)\w*|(?:ok?(\d+)[-\u]?\ w*?\w*?[-\u]?(\ d+(:?ok?)$/
对于第一组,它返回1和2,对于第二组,它返回3或4中的数字。这似乎与您想要的方式相匹配:
/(?|([a-z-\.]+\/[a-z-\.]+)?(#\d+)|($)?(?:^|-|_)(\d+)|($)?(\d+)(?:$|-|_))/gmi
在这里查看:
编辑:没有看到它是用javascript标记的,(?|)在javascript中不受支持,因此这里有一个可行的解决方案(基于您的示例):
其中第一部分,^(?[a-z\.\/]+\d+[a-z\.\/]+)$
“吃”无效行
其中第二部分,(?:([a-z\.-]+\/[a-z\.-]+)(?=#))
与abc/def
匹配,后跟一个
最后一部分,(#?\d+
)匹配一个或零个#
,后跟一个或多个数字
查看此处:'ex-owner/ex.repo#28'/1:owner/repo这不可能,因为您无法从匹配的“owner/ex.repo”中删除“ex.”。您是对的,这是我的一个输入错误。固定的
/^(?:[a-z\.\/]+\d+[a-z\.\/]+)$|(?:([a-z\.-]+\/[a-z\.-]+)(?=#))?(#?\d+)/gmi