正则表达式在连字符前后获取文本

Oli*_*ver 1 regex regex-lookarounds

我有这个字符串:

"Common Waxbill - Estrilda astrild"
Run Code Online (Sandbox Code Playgroud)

如何为连字符前后的单词编写2个单独的正则表达式?我想要的输出是:

"Common Waxbill" 
Run Code Online (Sandbox Code Playgroud)

"Estrilda astrild"
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 6

这很简单:

.*(?= - )     # matches everything before " - "
(?<= - ).*    # matches everything after " - "
Run Code Online (Sandbox Code Playgroud)

有关环顾断言的信息,请参见本教程。

  • Javascript没有后顾之忧。 (3认同)

Seb*_*ske 5

如果您不能使用后向查找,但是您的字符串始终采用相同的格式,并且不能包含多个连字符,则可以使用

^[^-]*[^ -]对于第一个和\w[^-]*$第二个(或[^ -][^-]*$如果连字符后的第一个非空格不一定是单词字符)。

一点解释: ^[^-]*[^ -]匹配字符串的开头(anchor ^),后跟任意数量的字符,这些字符不是连字符,最后是不是连字符或空格的字符(只是从匹配项中排除最后一个空格)。

[^ -][^-]*$采取相同的方法,但是反过来,首先匹配既不是空格也不是连字符的字符,然后匹配任意数量的既不是连字符的字符,最后是字符串的结尾(anchor $)。\w[^-]*$基本上是相同的,它使用\w而不是严格[^ -]。再次用于从匹配项中排除连字符后的空格。