2016-05-09 3 views
0

Я хочу использовать $htppBackend, чтобы высмеять некоторые службы. Моя проблема заключается в некотором параметре url службы, например: http://domain/service1?param1=a&param2=bКак создать динамическое регулярное выражение в javascript

Мне нужно регулярное выражение, которое может пересоздать http://domain/service1<whatever> подходит для http://domain/service1?param1=a&param2=b. Одна вещь, первая часть http://domain/service1 не является постоянной, она может быть http://domain/service2/sth/anything.

Пожалуйста, помогите. Благодарю.

Edit:

Я положил свой код здесь, чтобы сделать его легко понять.

У меня есть 4 API URLs:

angular 
    .module('moduleName') 
    .constant('getApi', { 
     attrList: 'http://domain/setup/attrList', 
     eventList: 'http://domain/setup/eventList', 
     vcList: 'http://domain/api/list1', 
     getRaDetails: 'http://domain/abc/getDetails?raId={0}&bookId={1}' 
    }); 

С attrList, eventList и vcList, они все в порядке с $httpBackend.whenGET(getApi.attrList).respond(responseObject); $httpBackend.whenGET(getApi.eventList).respond(responseObject); $httpBackend.whenGET(getApi.vcList).respond(responseObject);.

Но последний один getRaDetails, он не работает с $httpBackend.whenGET(getApi.getRaDetails).respond(responseObject); потому raId и bookId имеют различное значение каждый раз.

Теперь мне нужно регулярное выражение, чтобы сделать это правило - $httpBackend.whenGET(getApi.getRaDetails).respond(responseObject); работает со всеми raId и bookId значение.

Надеюсь, он сможет более подробно объяснить мой вопрос. Благодаря

+0

Это всегда 'http'? – Shafizadeh

+1

Что значит «правильно»? – vaso123

+0

@Shafizadeh: yes – Stiger

ответ

0

Это мой рабочий код:

_(getApis).each(function (api) { 
       var val = api.value.split('?')[0].replace(/\//g, '\\/'), 
        reg = new RegExp(val); 

       $httpBackend.whenGET(reg).respond(dummy[api.key]); 
      }); 

Спасибо всем.

0

Мне нужно регулярное выражение, которое может reconize http://domain/service1 является правильным для http://domain/service1?param1=a&param2=b

Я не думаю, что здесь требуется регулярное выражение. Просто проверить

var stringPattern = "http://domain/service1"; 
 
var input = "http://domain/service1?param1=a&param2=b"; 
 

 
if (input.indexOf(stringPattern) == 0) 
 
{ 
 
    alert("correct"); 
 
} 
 
else 
 
{ 
 
    alert("Incorrect"); 
 
}

+1

, который будет совпадать на входе «http: // domain/service1/path2», а также похоже, что хотел автор. – Paul

+0

@Paul Я проверяю, равен ли 'index' 0. Как он будет соответствовать чему-то еще? – gurvinder372

+1

'http: // domain.com /' будет иметь индекс 0 на 'http: // domain.com/path1', а также' http: // domain.com/path2' и т. Д., Поэтому моя точка что если он хочет, чтобы шаблон соответствовал полномочиям и пути ввода, ваше предложение не гарантирует этого. – Paul

0

Таким образом, если вы разборе Urls, то лучше использовать объект URL в JavaScript:

var input = 'http://domain/abc/getDetails?raId={0}&bookId={1}'; 
var test = 'http://domain/abc/getDetails'; 

var testUrl = new URL(test); 
var inputUrl = new URL(input); 

затем проверить различные биты:

if(testUrl.pathname === inputUrl.pathname){ 
    // they both have /abc/getDetails as the path 
} 
+0

спасибо за ваш ответ, но мне нужно регулярное выражение для' $ httpBackend' понять это. – Stiger

+0

Нет, из документации: «HTTP-url или функция, которая получает URL-адрес и возвращает true, если url соответствует текущему определению». https://docs.angularjs.org/api/ngMock/service/$httpBackend – Paul