微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

{}和+之间的全局模式差异

如何解决{}和+之间的全局模式差异

我引用了https://facelessuser.github.io/wcmatch/glob/,并说了

+(pattern_list):如果pattern_list中的任何一个或多个模式匹配输入字符串,则该模式匹配。 需要EXTGLOB标志。

{}:Bash样式括号扩展。这适用于之前的模式 还要别的吗。需要BRACE标志。

我可以看到每个描述都不相同,但实际示例很难理解。

例如,下面的两个有什么区别?

"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,json,css}": [
        "prettier --write","eslint --fix src/","tslint --fix --project .","git add"
    ]
},"lint-staged": {
    "src/**/*.+(js|jsx|ts|tsx|json|css)": [
        "prettier --write",

任何建议将不胜感激!

解决方法

{}实现了与Bash大括号扩展类似的功能。本质上src/**/*.{js,jsx,ts,tsx,json,css}将变为:

[
    'src/**/*.js','src/**/*.jsx','src/**/*.ts','src/**/*.tsx','src/**/*.json','src/**/*.css'
]

有一个时间和地点,但是您可能会发现这样做效率较低,因为您现在正在处理多个模式。

您可以更像正则表达式来思考+(),其中+(js|jsx|ts|tsx|json|css)会更等效于(js|jsx|ts|tsx|json|css)+。 因此它可以匹配jsjsjsxtxjson之类的东西,但实际上并不等同于{}

如果想与{}进行更有效的比较,您可能感兴趣的是@(js|jsx|ts|tsx|json|css),它等效于像(js|jsx|ts|tsx|json|css)这样的正则表达式模式,该模式只匹配一个且匹配js但不匹配jsjsxtxjson。之所以更有效,是因为您得到的是单一模式而不是多个模式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。