Наиболее продуктивное регулярное выражение

Я могу получить строки, подобные этим:

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"]
Другие вопросы по тегам