效率最高的正则表达式

时间:2016-01-19 08:47:44

标签: javascript node.js regex replace substr

我可以得到这样的字符串:

D:/projects/my-project/node_modules/some-module/node_modules/lodash/some-folder/lodash.js
D:/projects/my-project/node_modules/some-module/node_modules/colors/some-folder/colors.js

从这些字符串中的任何一个,我必须得到下一个子串:

D:/projects/my-project/node_modules/some-module/node_modules/lodash
D:/projects/my-project/node_modules/some-module/node_modules/colors

换句话说,我必须得到以模块文件夹名称结尾的子字符串。

我认为使用regexp并且我想使用它们。 但我在正则表现方面表现不佳。我必须尽快获得这些子串。请你能为我提供最快速的正则表达式吗?或者也许有另一种更快的方法来获得这些子串?

1 个答案:

答案 0 :(得分:1)

尝试

/.*?node_modules(?!.*node_modules)\/[^/]*/

这说明找到node_modules字符串未被跟踪(负面预测)由任何其他node_modules,换句话说是最后一个,然后取以下细分为正斜杠。

var s = "D:/projects/my-project/node_modules/some-module/node_modules/lodash/some-folder/lodash.js"
var r = /.*node_modules(?!.*node_modules)\/[^/]*/;

> s.match(r)
< ["D:/projects/my-project/node_modules/some-module/node_modules/lodash"]