我正在尝试使用javascript将模块名称与其路径分开。我收到正则表达式的字符串可能有也可能没有" .js"最后,但在第二个匹配组中我不需要" .js"如果它在那里。这是到目前为止的正则表达式:
([\.\/]?.+\/)?(.+[\.js]?)
例如,如果我有字符串:./ pillchart.js
匹配组1:./
匹配组2:饼图
更多测试/示例:https://regex101.com/r/nL9lK3/1
答案 0 :(得分:2)
我建议首先过滤字符串,然后用正则表达式来检索模块名称。
function getModule (filePath) {
var arr = filePath.split('/');
var len = arr.length;
var path = arr.splice(0, arr.length - 1).join('/');
var moduleName = arr[0].match(/([a-zA-Z\-\_]+)(?=(\.js)?)/gi)[0];
return [path, moduleName];
}
此函数将返回path
和moduleName
的数组。
答案 1 :(得分:1)
所以试试这个
(\/?.+\/)*(.+?)(\.js)?$
并仅使用前两个匹配组(此处为更新后的regex101)。
第一组: (\/?.+\/)*
匹配所有可能的路径,以最终斜杠结尾。
第二组: (.+?)
匹配路径后的所有内容,但使用延迟量词,允许第三组匹配(如果可以)。
第三组: (\.js)?
匹配字符串末尾的可能.js
。