【问题标题】:filter by part of a path in Node JS在 Node JS 中按路径的一部分过滤
【发布时间】:2021-10-12 21:37:31
【问题描述】:

如何检查目录是否包含如下字符串的一部分:

目录示例:

c:\dev\test\modules\frontend-js\packages\federated-search-result-portlet\assets\locales\sv\translation.json

c:\dev\test\modules\frontend-js\packages\federated-search-result-portlet\assets\locales\en\translation.json

c:\dev\test\modules\frontend-js\packages\federated-search-result-portlet\assets\locales\fr\translation.json

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

所以我需要按目录的特定部分进行更多过滤:

当目录有'assets\locales\en'时我需要

它可以在 Windows 上运行,但我也想在 Linux 上使用它

【问题讨论】:

    标签: node.js


    【解决方案1】:

    在最新的 NodeJS 版本中,您可以使用这两种方法,其中第一种使用 includes()method

    const yourString = "c:\dev\test\modules\frontend-js\packages\federated-search-result-portlet\assets\locales\fr\translation.json";
    
    const substring = "assets\locales\fr";
    
    console.log(yourString.includes(substring)); // true
    console.log(yourString.indexOf(substring) !== -1); // true

    当然,在您的示例中,您必须将字符串变量更改为您的 path.basename(file) 值,因此它们不是这样的静态变量,而是表示目录路径的字符串。

    要使其同时在 Windows 和 Linux 上工作,您可以使用正则表达式或 replace() 方法替换“/”和“\”,假设您的路径是表示路径的普通字符串。

    无论哪种方式,您都可以使用正则表达式查找。 在上面的示例中,它将是:

    yourString.match(regex)
    

    您的正则表达式可以在哪里建立,记住您需要替换“assets\locales\fr”或“assets/locales/fr”

    当你使用正则表达式时,常规的做法是使用 / 字符作为分隔符,例如:

    s/pattern/replacement/g;
    

    但您可以使用任何字符代替 /,例如管道:

    s|pattern|replacement|g;
    

    然后考虑到这一点,您可以构建您的正则表达式。示例:https://regex101.com/r/eQ7aV6/2

    另外,请记住,您可以删除反斜杠/正斜杠,然后搜索没有它的路径,例如 assetslocalesfr 或用另一个符号更改它。

    【讨论】:

    • 你认为这适用于 linux,因为 linux 有不同的方式来拥有路径
    • 是的,如果您有字符串,那么您可以尝试比较两种方式或使用正则表达式或 replace() 将“/”更改为“\”等等。
    • @Hani 我刚刚改进了答案
    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多