1. 程式人生 > >正則獲取檔名,'E:/**/lib/viser-vue/index.js'

正則獲取檔名,'E:/**/lib/viser-vue/index.js'

'E:/**/lib/viser-vue/index.js'

使用後行斷言匹配 E:/**/lib/viser-vue/,然後進行變數名稱校驗

1、

const filePath = 'E:/**/lib/viser-vue/index.js';
console.log(filePath.match(/.*(?=(\.js)$)/g)); // E:/**/lib/viser-vue/index

2、

const filePath = 'E:/**/lib/viser-vue/index.js';
console.log(filePath.match(/(?>=(.*\/))[_0-9a-zA-Z]+(?=(\.js)$)/g)); // index

3、測試,變數名稱不能以數字開頭

const fileNameReg = /(?<=.*\/)(?<varName>[_$a-zA-Z])+?([0-9\k<varName>]*)(?=\.js$)/g;
console.log('E:/**/lib/viser-vue/$index.js'.match(fileNameReg));
console.log('E:/**/lib/viser-vue/012384.js'.match(fileNameReg));
console.log('E:/**/lib/viser-vue/_12aaaa2.js'.match(fileNameReg));
console.log('a12aaaa2.js'.match(fileNameReg));

node是可以使用的,瀏覽器中使用,注:部分瀏覽器不支援後行斷言

// const fileNameReg = /(?<=.*\/)(?<varName>[_$a-zA-Z])+?([0-9\k<varName>]*)(?=\.js$)/g;
const fileNameReg = /(?<=.*\/)[_$a-zA-Z]+?([_$a-zA-Z0-9]*)(?=\.js$)/g;
console.log('E:/**/lib/viser-vue/$index.js'.match(fileNameReg));
console.log('E:/**/lib/viser-vue/012384.js'.match(fileNameReg));
console.log('E:/**/lib/viser-vue/_12aaaa2.js'.match(fileNameReg));
console.log('a12aaaa2.js'.match(fileNameReg));
console.log(parseVarNameByFilePath('E:/**/lib/viser-vue/$index.js'));
console.log(parseVarNameByFilePath('E:/**/lib/viser-vue/012384.js'));
console.log(parseVarNameByFilePath('E:/**/lib/viser-vue/_12aaaa2.js'));
console.log(parseVarNameByFilePath('/1a12aaaa2.js'));

function parseVarNameByFilePath(path, ext = '.js') {
  path = path.split('/');
  path = path[path.length - 1];
  if (!path.endsWith(ext)) return null;
  if (!/[_$a-zA-Z]/.test(path[0])) return null;
  return path.slice(0, -ext.length);
}