簡體   English   中英

將變量注入正則表達式

[英]Inject variable into regular expression

所以我正在嘗試從 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 語句在表達式之間切換,而是將變量注入通用正則表達式。 我嘗試了以下(使用反引號( ` )能夠注入變量:

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);
    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)卻沒有。

保持簡單,不要使用正則表達式,而是使用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('.'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM