我正在研究正则表达式,但我无法让它按我想要的方式工作。
字符串,2 个示例:
- /download?standard=yes&file=France_new-aquitaine_deux-sevres_europe_2.obf.zip
- /download?standard=yes&file=Afghanistan_asia_2.obf.zip
我想提取以下部分:
- country (France)
- region (new-aquitaine)
- department (deux-sèvres)
- worldZone (europe)
我的 WIP 正则表达式:
/.*file=(?:(.*?)_{1})*?(?:\d\.obf\.zip)$/gi
也许有一种递归方式来处理它,我不知道。
你能帮助或指导我吗? 谢谢。
解决方法:
/.*file=([^_]+)_(?:([^_]+)_)??(?:([^_]+)_)??([^ _]+)_2\.obf\.zip$/g
最佳答案
一个选项可能是使用捕获组,如果您还想匹配第二个字符串的国家/地区和地区,您可以使用可选的非捕获组 (?:...) 将该部分设为可选?
各部分之间用下划线分隔。您可以使用否定字符类 ([^_]+)
匹配除下划线之外的任何字符来捕获其间的部分。
.*file=([^_]+)_([^_]+)(?:_([^_]+)_([^_]+))?_\d+\.obf\.zip$
关于JavaScript 正则表达式 : repeating non-capturing group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60853480/