本文介绍如何使用JavaScript正则表达式验证文件夹名称是否符合规范。重点讲解kebab-case(小写加中划线)和大驼峰命名法(PascalCase)的正则匹配逻辑,并结合关键字黑名单机制,确保文件名既符合格式要求又避开保留字。
背景:
在Git提交代码时,通常需要验证新增的文件或文件夹名称是否符合特定的命名规范。
具体规范如下:全部采用小写方式,以中划线分隔,使用kebab-case格式(小写、短横线连接)。正例如:
scripts / styles / components / images / utils / layouts / demo-styles / demo-scripts / img / doc;反例如:script / style / demo_scripts / demoStyles / imgs / docs。【特殊】VUE项目中的components目录下的组件文件夹需使用PascalCase格式(与驼峰法相似,单词首字母大写)。
因此,需要验证普通文件名是否符合中划线命名法(kebab-case),以及Vue组件文件夹是否符合大驼峰命名法(PascalCase)。
中划线命名法(kebab-case):
思路:
1、排除文件名中包含空格的情况。
2、排除包含大写字母的情况。
3、排除其他连接方式(如——、_、.等),反向推导:命名中只能包含小写字母和连字符(-)。
4、排除保留关键字:如script、style、imgs、docs等。
结论:
1、限定以小写字母开头,中间只包含小写字母和连字符(-),并以小写字母结尾。正则表达式为:/^[a-z]{1}[a-z-]+[a-z]$/。
2、需额外排除关键字。
// 关键字
const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"]
// 正则:限定以小写字母开头,并且中间只包括小写字母和-,以小写字母结尾
let reg = /^[a-z]{1}[a-z-]*?[a-z]$/;
// /^[a-z]{1}[a-z-0-9]*?[a-z0-9]$/ (这个是限定以小写字母开头,中间小写or数字,结尾数字。两位数的情况下中间可以省略)
// 要判断的文件名
let fileName = `xxxxx`
if(KEYWORDS.indexOf(fileName) > -1){
// 文件名是关键字
}else if( reg.test(fileName) ){ // 判断:限定以小写字母开头,并且中间只包括小写字母和-,以小写字母结尾
// 符合要求
}else{
// 不符合要求
}大驼峰命名法(PascalCase):
// 正则:限定以大写字母开头,并且中间只包括大写or小写字母,以小写字母结尾
let reg = /^[A-Z]{1}[a-zA-Z]*?[a-z]$/;
// 关键字
const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"]
// 大写首字母字母的关键字
let up_keywords = KEYWORDS.map(item=>{
return item.charAt(0).toUpperCase() + item.slice(1);
})
// 要判断的文件名
let fileName = `xxxxx`
if(up_keywords.indexOf(fileName) > -1){
// 文件名是关键字
}else if( reg.test(fileName) ){ // 判断:限定以小写字母开头,并且中间只包括小写字母和-,以小写字母结尾
// 符合要求
}else{
// 不符合要求
}小驼峰命名法(lowerCamelCase):
// 正则:限定以大写字母开头,并且中间只包括大写or小写字母,以小写字母结尾
let reg = /^[a-z]{1}[a-zA-Z]*?[a-z]$/;
// 关键字
const KEYWORDS = ["script","style","imgs","docs","break","else","new","var","case","finally","return","void","catch","for","switch","while","continue","function","this","with","default","if","throw","delete","in","try","do","instranceof","typeof","abstract","enum","int","short","boolean","export","interface","static","byte","extends","long","super","char","final","native","synchronized","class","float","package","throws","const","goto","private ","transient","debugger","implements","protected ","volatile","double","import","public"]
// 要判断的文件名
let fileName = `xxxxx`
if(KEYWORDS .indexOf(fileName) > -1){
// 文件名是关键字
}else if( reg.test(fileName) ){ // 判断:限定以小写字母开头,并且中间只包括小写字母和-,以小写字母结尾
// 符合要求
}else{
// 不符合要求
}补充:JS正则匹配获取文件名。
//获取文件名,不带后缀
var file_name=file_path.replace(/(.*\/)*([^.]+).*/ig,"$2");
//获取文件后缀
1.var FileExt=file_path.replace(/.+\./,"");
2.var fileExtension = file_path.substring(file_path.lastIndexOf('.') + 1);
//截取文件后缀
var reg = /\.\w+$/;
var file_name = file_path.replace(reg,'');总结
到此这篇关于如何使用JS正则表达式验证文件夹名是否符合规范的文章就介绍到这了,更多相关JS正则验证文件夹名符合规范内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!