如何在 javascript 中创建动态正则表达式
How to create dynamic regex in javascript
我想使用 $htppBackend
模拟一些服务。我的问题是某些服务 url 有参数,例如:http://domain/service1?param1=a¶m2=b
我需要一个正则表达式,它可以识别 http://domain/service1<whatever>
对 http://domain/service1?param1=a¶m2=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}'
});
使用 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
值。
希望它能更清楚地解释我的问题。谢谢
I need an regex which can reconize http://domain/service1 is
correct for http://domain/service1?param1=a¶m2=b
我认为这里不需要正则表达式。只需检查
var stringPattern = "http://domain/service1";
var input = "http://domain/service1?param1=a¶m2=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]);
});
谢谢大家
我想使用 $htppBackend
模拟一些服务。我的问题是某些服务 url 有参数,例如:http://domain/service1?param1=a¶m2=b
我需要一个正则表达式,它可以识别 http://domain/service1<whatever>
对 http://domain/service1?param1=a¶m2=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}'
});
使用 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
值。
希望它能更清楚地解释我的问题。谢谢
I need an regex which can reconize http://domain/service1 is correct for http://domain/service1?param1=a¶m2=b
我认为这里不需要正则表达式。只需检查
var stringPattern = "http://domain/service1";
var input = "http://domain/service1?param1=a¶m2=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]);
});
谢谢大家