фильтр по части пути в узле JS

#node.js

Вопрос:

Как я могу проверить, есть ли в каталоге часть строки, как показано ниже :

примеры каталогов:

c:devtestmodulesfrontend-jspackagesfederated-search-result-portletassetslocalessvtranslation.json

c:devtestmodulesfrontend-jspackagesfederated-search-result-portletassetslocalesentranslation.json

c:devtestmodulesfrontend-jspackagesfederated-search-result-portletassetslocalesfrtranslation.json

 path.basename(file) ==='translation.json'  amp;amp; dir.includes("\assets\locales\en") amp;amp; !dir.includes("\assets\locales\en_")
 

поэтому мне нужно больше фильтровать по определенной части каталога :

как мне нужно, когда в каталоге есть «активылокалиru»

Он работает в Windows, но я хочу, чтобы он был и в Linux

Ответ №1:

В последней версии NodeJS вы можете использовать эти два метода, где первый использует includes() метод.

 const yourString = "c:devtestmodulesfrontend-jspackagesfederated-search-result-portletassetslocalesfrtranslation.json";

const substring = "assetslocalesfr";

console.log(yourString.includes(substring)); // true
console.log(yourString.indexOf(substring) !== -1); // true 

Конечно, в вашем примере вы должны изменить строковую переменную на свои path.basename(file) значения, чтобы они не были статичными, как это, и представляли собой строку пути к каталогу.

Чтобы заставить его работать в Windows и Linux одновременно, вы можете либо заменить «/»и «» с помощью регулярного выражения, либо заменить() методом, предполагающим, что ваш путь представляет собой обычную строку, представляющую путь.

В любом случае вы также можете использовать поиск по регулярному выражению. В приведенном выше примере это было бы:

 yourString.match(regex)
 

Где может быть создано ваше регулярное выражение, имейте в виду, что вам нужно будет заменить либо «активылокалиfr», либо «активы/локали/fr».

При использовании регулярного выражения общепринятый подход заключается в использовании символа / в качестве разделителя, например:

 s/pattern/replacement/g;
 

Но вы можете использовать любой символ вместо /, например, канал:

 s|pattern|replacement|g;
 

Затем, имея это в виду, вы можете построить свое регулярное выражение. Пример: https://regex101.com/r/eQ7aV6/2

Кроме того, имейте в виду, что вы можете удалить косую черту назад/вперед, а затем искать путь без нее, например assetslocalesfr , или изменить его другим символом.

Комментарии:

1. Как вы думаете, это будет работать с linux, так как в linux есть другой способ иметь пути

2. Да, если у вас есть строка, вы можете попробовать либо сравнить оба способа, либо использовать регулярное выражение или заменить (), чтобы изменить «/» на «» и так далее.

3. @Хани, я только что улучшил ответ