Попытка разделить строки с известным начальным сегментом и необязательными дополнительными сегментами до общей конечной точки.
eg.
https://example.com/folder/upload/v1/subfolder/asset.doc
https://example.com/folder/upload/temp_cache_folder_id/v1/subfolder/asset.doc
В основном нужно удалить что-либо между / upload / и / v1 /
В настоящее время дошли до
string.split(/.*?(?=v1)/)
Не уверен, как продолжить, оглядываясь назад, пока / не загрузит / и не вернется
[https://example.com/folder , v1/subfolder/asset.doc]
Upload / temp_cache_folder_id позже присоединяется к определенным переменным env, поэтому в нем нет необходимости. Именно поэтому раскол был сделан в первую очередь.
2 ответа
Использовать
/^(.*?)\/upload\/.*?(v1.*)/
См. доказательство регулярного выражения.
Объяснение
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
upload 'upload'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
( group and capture to \2:
--------------------------------------------------------------------------------
v1 'v1'
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
) end of \2
Код JavaScript :
const string = "https://example.com/folder/upload/v1/subfolder/asset.doc";
const [_, url, v1] = /^(.*?)\/upload\/.*?(v1.*)/.exec(string);
console.log("URL: " + url);
console.log("v1: " + v1);
Используя разделение, вы можете сопоставить /upload/
, за которым следует, по крайней мере, возможные символы, пока для утверждения v1
справа не будет.
\/upload\/.*?\b(?=v1)
См. демонстрацию регулярных выражений.
Объяснение
\/upload\/
Соответствие/upload/
.*?
Соответствует 0+ вхождений любого символа, кроме новой строки, по крайней мере\b(?=v1)
Граница слова, за которой следует утверждение положительного просмотра впередv1
справа.
[
"https://example.com/folder/upload/v1/subfolder/asset.doc",
"https://example.com/folder/upload/temp_cache_folder_id/v1/subfolder/asset.doc"
].forEach(s => console.log(s.split(/\/upload\/.*?\b(?=v1)/)));
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.