正则表达式多个组,第一个组不包括最后一个组

时间:2019-07-16 13:03:41

标签: regex

我需要匹配字符串中LAST _之后的任何单词,然后匹配减去_之前的所有单词。

因此test_test_DAY将返回:[ 'test_test', 'DAY' ]

这是我目前所拥有的,在DAY部分上可以正常使用。

([^\_]+$)

1 个答案:

答案 0 :(得分:1)

模式([^\_]+$)捕获单个匹配项超过1次而不是下划线。

您可以使用2个捕获组:

^(.*)_(.*)$

如果_前后必须至少有1个字符,则可以将量词更改为+而不是*

Regex demo

如果模式应考虑与下划线匹配,而不能有2个连续的下划线,则可以将2个捕获组与一个重复组一起使用:

^([^_]+(?:_[^_]+)*)_([^_]+)$
  • ^字符串的开头
  • (捕获组1
    • [^_]+ Negated character class,匹配除_
    • 外的任何字符的1+倍
    • (?:_[^_]+)*重复0次以上,与_匹配,然后跟除_
    • 以外的任何字符
  • )关闭第1组
  • _字面上匹配
  • (捕获组2
    • [^_]+匹配除_以外的任意字符1倍以上
  • )关闭第2组
  • $字符串结尾

Regex demo