2016-05-19 4 views
0

В Node.js сервере нужно преобразовать URL-адреса с помощью JavaScript следующим образом:Условно замена строки с использованием регулярных выражений

Пример 1:

hostA/blah/dir1/name/id.js?a=b --> name.hostC/dir2.js?guid=id&a=b 

Пример 2:

hostB/dir1/name/id.js --> name.hostC/dir2.js?guid=id 

Преобразование выполняется с помощью string.replace с использованием регулярных выражений, подробно описанных в файле конфигурации.

До сих пор у меня есть:

url.replace(/.*\\/dir1\\/(.*)\\/\\(d{2})\\.js?:(?=\?)(.*)/, "$1.hostC\/dir2.js?guid=$2"); 

замещающая строка определяет ?guid=id. Как изменить выражение или заменяющую строку так, чтобы &originalQueryString (отметить амперсанд) будет добавлен в случае примера 1, и ничего не добавлено в случае примера 2?

+0

Is [this] (https://regex101.com/r/fJ7oW9/1) что вы ищете? –

+0

@ThomasAyoub В первом тестовом случае ему нужно изменить второй '?' На '&' (отсюда и трудность). – 4castle

ответ

0

Вы можете написать что-то вроде

/([^/]+)\/([^./]+)\.js(?:\?(.*))?$/ 

Пример

> "hostA/blah/dir1/name/id.js".replace(/([^/]+)\/([^./]+)\.js(?:\?(.*))?$/, "$1.hostC/dir2.js?guid=$2&$3") 
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&" 

> "hostA/blah/dir1/name/id.js?a=b".replace(/([^/]+)\/([^./]+)\.js(?:\? 
(.*))?$/, "$1.hostC/dir2.js?guid=$2&$3") 
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&a=b" 

Если задняя & проблема, вы можете разбить регулярное выражение в двух утверждениях,

< "hostA/blah/dir1/name/id.js".replace(/([^/]+)\/([^./]+)\.js$/, "$1.hostC/dir2.js?guid=$2") 
> "hostA/blah/dir1/name.hostC/dir2.js?guid=id" 

> "hostA/blah/dir1/name/id.js?a=b".replace(/([^/]+)\/([^./]+)\.js(?:\?(.*))$/, "$1.hostC/dir2.js?guid=$2&$3") 
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&a=b" 
+0

Они не хотят, чтобы в URL появился конечный '&'. * ничего не добавлено в случае примера 2 * – 4castle

+0

Как насчет 'hostA/blah/dir1/name/id.js? a = b? b = c'? –

+0

@ThomasAyoub Я предполагаю, что это не действительный url – nu11p01n73R

1

Это будет работать для ваших примеров:

text.replace(/.*?\/dir1\/([^\/]+)\/(.*?)\.js\??(.*)/i, "$1.hostC/dir2.js?guid=$2&$3").replace(/&$/, "") 

Вы можете изменить параметры регулярных выражений, чтобы включить «г» или «т», если это предусмотрено в вашей реализации.

+0

Это не отвечает на мой вопрос, но это то, что я делал, потому что похоже, что одно выражение для выполнения того, что я хочу, слишком сложно. – Dondey

 Смежные вопросы

  • Нет связанных вопросов^_^