正则表达式匹配除" .js"之外的所有字符。

时间:2016-05-18 01:58:10

标签: javascript regex

我正在尝试使用javascript将模块名称与其路径分开。我收到正则表达式的字符串可能有也可能没有" .js"最后,但在第二个匹配组中我不需要" .js"如果它在那里。这是到目前为止的正则表达式:

([\.\/]?.+\/)?(.+[\.js]?)

例如,如果我有字符串:./ pillchart.js

匹配组1:./

匹配组2:饼图

更多测试/示例:https://regex101.com/r/nL9lK3/1

2 个答案:

答案 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];
}

此函数将返回pathmoduleName的数组。

答案 1 :(得分:1)

所以试试这个

(\/?.+\/)*(.+?)(\.js)?$

并仅使用前两个匹配组(此处为更新后的regex101)。

第一组: (\/?.+\/)*匹配所有可能的路径,以最终斜杠结尾。

第二组: (.+?)匹配路径后的所有内容,但使用延迟量词,允许第三组匹配(如果可以)。

第三组: (\.js)?匹配字符串末尾的可能.js