如何在 javascript 中创建动态正则表达式

How to create dynamic regex in javascript

我想使用 $htppBackend 模拟一些服务。我的问题是某些服务 url 有参数,例如:http://domain/service1?param1=a&param2=b

我需要一个正则表达式,它可以识别 http://domain/service1<whatever>http://domain/service1?param1=a&param2=b 是正确的。有一件事,第一部分 http://domain/service1 不是常数,它可以是 http://domain/service2/sth/anything.

请帮忙。谢谢。

编辑:

为了便于理解,我把我的代码放在这里。

我有 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}'
    });

使用 attrListeventListvcList,它们可以 $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); 因为 raIdbookId 每次都有不同的值。

现在我需要一个正则表达式来制定此规则 - $httpBackend.whenGET(getApi.getRaDetails).respond(responseObject); 适用于所有 raIdbookId 值。

希望它能更清楚地解释我的问题。谢谢

I need an regex which can reconize http://domain/service1 is correct for 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" );
}

所以,如果是解析Urls,最好使用JavaScript中的URL对象:

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
}

这是我的工作代码:

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

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

谢谢大家