Мне нужно регулярное выражение, чтобы соответствовать строке - PullRequest
0 голосов
/ 04 октября 2019

У меня есть такой URL-адрес

let url = "https://storage.cloud.google.com/dev-radius-backend/merchant/docs/1568875072010.jpg?organizationId=837717194226"

Мне нужно сопоставить подстроку" /merchant/docs/1568875072010.jpg"

IЯ нашел regEx, чтобы найти базу URL, но так как в этом случае имя файла находится между, а не концом, я не мог написать regEx сам.

Но я нашел способ, который не оченьэффективный

var pathArray = url.split('/');
var a = pathArray[6].split('?')
var fileName = '/' + pathArray[4] + '/' + pathArray[5] + '/' + a[0]

Мне нужно, чтобы fileName был "/merchant/docs/1568875072010.jpg"

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Следующее регулярное выражение соответствует шаблону:
\/[^\/]+\/[^\/]+\/[^\/]+(?=\.)\.[^?]+

Пример:

var url = 'https://storage.cloud.google.com/dev-radius-backend/merchant/docs/1568875072010.jpg?organizationId=837717194226';
var match = url.match(/\/[^\/]+\/[^\/]+\/[^\/]+(?=\.)\.[^?]+/);
    
if (match) {
    console.log(match[0]); // "/merchant/docs/1568875072010.jpg"
    document.getElementById('result').innerText = match[0];
}
<span id="result"></span>

Объяснение регулярного выражения:
\/ - соответствует литералу /
[^\/]+ - соответствует чему-либо, кроме / хотя бы один раз
(?=\.) - положительный прогноз, утверждающий, что то, что непосредственно следует за текущей позицией в строке, является литеральной точкой
\. - соответствует литеральной точке
[^?]+ соответствует всему, чтоне буквальный знак вопроса

0 голосов
/ 04 октября 2019

Хотя твой вопрос меня смущает. Путаница между:

1: , если вы хотите сопоставить /merchant/docs/1568875072010.jpg с url string, тогда используйте includes метод

var url = "https://storage.cloud.google.com/dev-radius-backend/merchant/docs/1568875072010.jpg?organizationId=837717194226";
if (str.includes("/merchant/docs/1568875072010.jpg")) {
   alert('file found in URL')
}

2: Если вы хотите извлечь эту информацию из строки URL:

console.log(new URL(url).pathname.replace("/dev-radius-backend", ""));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...