我可以得到这样的字符串:
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并且我想使用它们。 但我在正则表现方面表现不佳。我必须尽快获得这些子串。请你能为我提供最快速的正则表达式吗?或者也许有另一种更快的方法来获得这些子串?
答案 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"]