JavaScript - получить только часть строки после определенного выражения - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующее:

var string = 'https://sub.example.com/dir/ https://sub.example.com/dir/v2.5/'
var hostname = 'sub.example.com';
var hostname_match = hostname.replace(/\./g, '\\.');

string.replace(new RegExp('https\:\/\/'+hostname_match+'\/(.*)', 'g'), '/$1');

Я хочу получить следующее:

/dir/ /dir/v2.5/

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете использовать

new RegExp('https://'+hostname_match+'/(\\S*)', 'g')

Здесь .* заменяется \S*, совпадающим с нулем или более непробельных символов.

См. Демоверсию JS:

var string = 'https://sub.example.com/dir/ https://sub.example.com/dir/v2.5/'
var hostname = 'sub.example.com';
var hostname_match = hostname.replace(/\./g, '\\.');
console.log(
  string.replace(new RegExp('https://'+hostname_match+'/(\\S*)', 'g'), '/$1')
);

Обратите внимание, что вам не нужно экранировать косую черту в нотации конструктора, поскольку / не является специальным метасимволом регулярных выражений. Двоеточие не должно быть экранировано в любых контекстах регулярных выражений.

0 голосов
/ 16 января 2019

Вы можете просто заменить http:// + hostname:

var string = 'https://sub.example.com/dir/ https://sub.example.com/dir/v2.5/'
var hostname = 'sub.example.com';

let urls = string.split(' ')
.map(u => u.replace('https://'+hostname, ''))

console.log(urls)

// if you want a space-separated string:
console.log(urls.join(' '))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...