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检查更新的答案和解释。