我有一个如下所示的字符串;
var x = "test/foo/4/bar/3"
我有一个模式
var y = "test/foo/{id}/bar/{age}"
是否可以通过正则表达式使用该模式从变量“x”中提取数字 4 和 3?
我有一个如下所示的字符串;
var x = "test/foo/4/bar/3"
我有一个模式
var y = "test/foo/{id}/bar/{age}"
是否可以通过正则表达式使用该模式从变量“x”中提取数字 4 和 3?
我建议,如果字符串格式可以预测为该格式,请避免使用正则表达式:
var str = "test/foo/4/bar/3",
parts = str.split('/'),
id = parts[2],
age = parts[4];
但是,如果您觉得您真的必须使用正则表达式(并使您的生活复杂化),则有可能:
var str = "test/foo/4/bar/3",
parts = str.split('/'),
id = str.match(/\/(\d+)\//)[1],
age = str.match(/\/(\d+)$/)[1];
console.log(id,age);
参考:
如果您有非常量模式,并且您的模式是“test/name1/value1/name2/value2”,请检查:
function match(url, variables) {
/* regexp */
function MatchRE(variable) {
return new RegExp("/" + variable + "\\/([^\\/]+)");
}
var regExp, result = {};
for (var i=0; i<variables.length; i++) {
regExp = new MatchRE(variables[i]);
if (regExp.test(url)) {
result[variables[i]] = RegExp.$1;
}
}
return result;
}
example:
match("test/foo/4/bar/3", ["foo", "bar"]); //Object {foo: "4"}
match("test/foo/testValue1/bar/testValue2/buz/testValue3", ["foo", "buz"]); //Object {foo: "testValue1", buz: "testValue3"}