正则表达式在 Linux 中工作,但在 Windows 中不起作用 - node.JS

标签 regex linux windows node.js

这里有一个小的 Web 服务器函数,它获取 url 并解析它,确保客户端不会请求不在服务器根文件夹下的资源

function getUrl(url, resourceMap, rootFolder) {
    var path = require('path');
    if (typeof resourceMap[url] !== 'undefined') {
        return (path.join(rootFolder,resourceMap[url]));
    } 
    var absoluteURL = path.join(rootFolder,url);
    console.log("ROOT: "+rootFolder);
    console.log("NEW: "+absoluteURL);
    var regex = new RegExp('^' + rootFolder + '.*')
    if (absoluteURL.match(regex) === null) {
        console.log("FALSE");
        return (false);
    }
    return (absoluteURL);
}

如您所见,我使用正则表达式 '^' + rootFolder + '.*' 确保 absoluteURLrootFolder 开头

这在 Linux 上运行良好,但在 Windows 中它总是返回 false。

顺便说一句,输出是

ROOT: C:\Users\user\workspace
NEW: C:\Users\user\workspace\images\IMG_7102.JPG

所以我知道 url 的解析是可以的。

艾米的想法为什么? 谢谢

最佳答案

在 Windows 上,路径中的 \ 成为正则表达式中的转义字符。

您需要regex-escape它:

rootFolder.replace(/[-[\/{}()*+?.\\^$|]/g, "\\$&")

关于正则表达式在 Linux 中工作,但在 Windows 中不起作用 - node.JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922086/

相关文章:

java - 用 href 替换文本中的 URL(在 Java 中)

c++ - Clang 与 Clang tidy 是否检测到相同的警告和错误?

windows - 是否可以找到 DLL 中声明的结构的大小?

linux - 使用 ls -R 列出没有子目录信息的文件

c++ - 检查是否安装了 Windows 服务? (C++)

c++ - 线性大小增加有时最终会增加 1

正则表达式(ruby)删除一组字符的所有实例,除非它们位于字符串的开头

regex - 如何替换 Notepad++ /Visual Studio中的特定模式

仅适用于大写字母和数字的 Java 正则表达式

linux - 如何 Hook 特定共享 ELF 库的函数?