Regex 如何匹配字符串并忽略扩展名(如果存在)?

Regex 如何匹配字符串并忽略扩展名(如果存在)?,regex,Regex,我正在尝试构建一个正则表达式,它选择一个用户用户名,比如dave.me,但不包括扩展名(如果存在) 预期行为 dave.me # Would pick dave.me dave.me.json # Would pick dave.me only dave_me@me # Would pick dave_me@me dave_me@me.json # Would pick dave_me@me dave_me@me.com.json # Would pick dave_me@me.com only

我正在尝试构建一个正则表达式,它选择一个用户用户名,比如
dave.me
,但不包括扩展名(如果存在)

预期行为

dave.me # Would pick dave.me
dave.me.json # Would pick dave.me only
dave_me@me # Would pick dave_me@me
dave_me@me.json # Would pick dave_me@me
dave_me@me.com.json # Would pick dave_me@me.com only
dave_me@me.com # Would pick dave_me@me.com
到目前为止,我有:

[\w.@+-]+(?=.json|.csv|.xml)

…但这在字符串(如
dave.me
中失败,并且仅当字符串包含
.json
.csv
.xml
时才会通过。您可以使用以下模式:

^[\w.@+-]+?(?=\.json|\.csv|\.xml|\s|$)
. 对模式所做的更改:
  • 添加了
    ^
    以仅匹配字符串开头的用户名。否则,将匹配任何其他单词

  • 使用惰性匹配
    +?
    来防止捕获扩展

  • 转义未转义的
    字符(即
    \.

  • |\s |$
    添加到“向前看”中,以便在后跟扩展名或空白字符或位于字符串末尾时停止捕获


您只想将此扩展用于特定的扩展(
.json
.csv
&
.xml
),还是有其他扩展?@Ambro-r是的,我只想要这些特定的扩展只有在末尾有空白时才有效?在这个用例中,我很可能会使用正则表达式,而不使用空格present@DRaymond检查更新的答案和解释。