regex 将变量插入正则表达式

hyrbngr7  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(134)

所以我尝试从一个URL获取某些值。假设我有以下URL:

let url = "https://gk.example.com/my-path/to/some+more/multiple.variables/moreparams";

我尝试使用正则表达式从URL中提取some+moremultiple.variables部分。
/(?<=/)([^/]*\+[^/]*)(?=/)/g(用于+分隔符)和/(?<=/)([^/]*\.[^/]*)(?=/)/g(用于.分隔符)

results = url.match(/(?<=/)([^/]*\+[^/]*)(?=/)/g); // result: ['some+more']
results = url.match(/(?<=/)([^/]*\.[^/]*)(?=/)/g); // result: ['gk.example.com', 'multiple.variables']

这将返回['some+more']['gk.example.com', 'multiple.variables'],这是一个我可以处理的结果。但是,我宁愿将一个变量注入到一个通用的正则表达式中,而不是使用if语句在表达式之间切换。我尝试了以下方法(使用backticks(′))来注入变量:

function getSplitUrl(sep, url) {
    if (!url) url = window.location.href;
    let regex = new RegExp('(?<=/)([^/]*'+sep+'[^/]*)(?=/)', `g`),
        results = [];
    results[0] = url.match(`(?<=/)([^/]*${sep}[^/]*)(?=/)`, `g`);
    results[1] = regex.exec(url);
    results[2] = regex_fix.exec(url);
    console.log('Regex 1: ', regex); // logs `Regex 1: /(?<=/)([^/]*${sep}[^/]*)(?=\/)/g`, where ${sep} is replaced by either \. or \+ (seemingly correct expression)
    console.log(url, sep, results);
    return null;
}

console.log(regex)看,它似乎是正确的正则表达式,但结果仍然是错误的。结果现在是['gk.example.com', 'gk.example.com']
我是不是漏掉了什么明显的东西?
编辑:
不知何故,url.match(regex)会传回正确的结果,而regex.exec(url)则不会。

cbeh67ev

cbeh67ev1#

保持简单,不要使用regex,而是使用the URL API来解析url:

const url = new URL("https://gk.example.com/my-path/to/some+more/multiple.variables/moreparams?limit=5&more=conf/fusion");
console.log(url.hostname);
console.log(url.pathname)
const parts = url.pathname.slice(1).split('/');
console.log(parts);
const find = (substring) => parts.filter(p => p.includes(substring));
console.log(find('+'));
console.log(find('.'));

相关问题