Ruby正则表达式过滤掉带有"字符串"后缀的单词结尾

Moo*_*oon 4 ruby regex gitlab

我想提出一个与以下字符串匹配的Ruby Regex:

MAINT: Refactor something
STRY-1: Add something
STRY-2: Update something
Run Code Online (Sandbox Code Playgroud)

但不应该匹配以下内容:

MAINT: Refactored something
STRY-1: Added something
STRY-2: Updated something

MAINT: Refactoring something
STRY-3: Adding something
STRY-4: Updating something
Run Code Online (Sandbox Code Playgroud)

基本上,第一个字之后:不应该与最终任一eding

这就是我目前所拥有的:

^(MAINT|(STRY|PRB)-\d+):\s([A-Z][a-z]+)\s([a-zA-Z0-9._\-].*)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了[^ed],[^ing]但他们不会在这里工作,因为我的目标不仅仅是单个角色.

我无法找到适当的解决方案来实现这一目标.

Jan*_*Jan 6

你可以用

^[-\w]+:\s*(?:(?!(?:ed|ing)\b)\w)+\b.+
Run Code Online (Sandbox Code Playgroud)

请参阅regex101.com上的演示.


细分说:

^                     # start of the line/string
[-\w]+:\s*            # match - and word characters, 1+ then :
(?:                   # non-capturing group
    (?!(?:ed|ing)\b)  # neg. lookahead: no ed or ing followed by a word boundary
    \w                # match a word character
)+\b                  # as long as possible, followed by a boundary
.*                    # match the rest of the string, if any
Run Code Online (Sandbox Code Playgroud)


我没有经验,Ruby但我想你可以选择拆分并检查第二个单词是否以ed或结尾ing.对于未来的程序员/同事来说,后一种方法可能更容易处理.