2016-05-09 18 views
0

Ich möchte $htppBackend verwenden, um einige Dienste zu verspotten. Mein Problem ist einige der Service-URL haben Parameter, z. B .: http://domain/service1?param1=a&param2=bSo erstellen Sie dynamische Regex in Javascript

Ich brauche eine Regex, die kann reconize http://domain/service1<whatever> ist korrekt für http://domain/service1?param1=a&param2=b. Eine Sache, der erste Teil http://domain/service1 ist keine Konstante, es kann http://domain/service2/sth/anything sein.

Bitte helfen. Vielen Dank.

Edit:

ich hier meinen Code zu setzen, um es einfach zu verstehen.

Ich habe 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}' 
    }); 

Mit attrList, eventList und vcList, sie sind ok mit $httpBackend.whenGET(getApi.attrList).respond(responseObject); $httpBackend.whenGET(getApi.eventList).respond(responseObject); $httpBackend.whenGET(getApi.vcList).respond(responseObject);.

Aber die letzte getRaDetails, es funktioniert nicht mit $httpBackend.whenGET(getApi.getRaDetails).respond(responseObject); weil raId und bookId jeweils mal unterschiedlichen Wert haben.

Jetzt brauche ich eine Regex, um diese Regel - $httpBackend.whenGET(getApi.getRaDetails).respond(responseObject); funktioniert mit allen raId und bookId Wert.

Ich hoffe, es kann meine Frage klarer erklären. Dank

+0

Das ist immer "http"? – Shafizadeh

+1

was meinst du "richtig"? – vaso123

+0

@Shafizadeh: ja – Stiger

Antwort

0

Dies ist mein Arbeitscode:

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

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

Vielen Dank.

0

Ich brauche eine Regex, die http://domain/service1 ist richtig für http://domain/service1?param1=a&param2=b

ist ein regex Ich glaube nicht, dass hier erforderlich reconize kann. Einfach nur

überprüfen

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

das auch auf die Eingabe von "http: // domain/service1/path2" passt, was nicht der Fall ist scheinen wie, was der Autor wollte. – Paul

+0

@Paul Ich überprüfe, ob der 'Index' 0 ist. Wie wird es mit etwas anderem übereinstimmen? – gurvinder372

+1

'http: // domain.com /' wird einen Index von 0 auf "http: // domain.com/path1" sowie "http: // domain.com/path2" usw. haben, also ist mein Punkt Wenn er möchte, dass das Muster mit der Autorität und dem Pfad der Eingabe übereinstimmt, wird dies von Ihrem Vorschlag nicht garantiert. – Paul

0

Also, wenn Sie Urls parsen, dann ist es am besten, das URL-Objekt in JavaScript zu verwenden:

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); 

dann die verschiedenen Bits testen:

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

danke für deine Antwort, aber ich brauche eine Regex für' $ httpBackend' das zu verstehen. – Stiger

+0

Nein, Sie nicht, aus der Dokumentation: "HTTP URL oder Funktion, die eine URL empfängt und True zurückgibt, wenn die URL der aktuellen Definition entspricht." https://docs.angularjs.org/api/ngMock/service/$httpBackend – Paul