Наиболее продуктивное регулярное выражение
Я могу получить строки, подобные этим:
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
Другими словами, я должен получить подстроку, которая заканчивается именем папки модуля.
Я думаю использовать регулярные выражения, и я хочу использовать их. Но я не очень хорош в производительности регулярных выражений. Я должен получить эти подстроки как можно быстрее. Не могли бы вы предложить мне самое быстрое регулярное выражение? Или, может быть, есть более быстрый способ получить эти подстроки?
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"]