匹配字符串中的参数

时间:2013-06-24 21:07:52

标签: javascript regex

我有一个如下所示的字符串;

var x = "test/foo/4/bar/3"

我有一个模式

var y = "test/foo/{id}/bar/{age}"

是否可以通过正则表达式使用模式从变量" x"中提取数字4和3?

2 个答案:

答案 0 :(得分:6)

我建议,如果字符串格式是可预测的格式,则避免使用正则表达式:

var str = "test/foo/4/bar/3",
    parts = str.split('/'),
    id = parts[2],
    age = parts[4];

JS Fiddle demo

但是,如果您认为自己必须使用正则表达式(并使您的生活复杂化),则有可能:

var str = "test/foo/4/bar/3",
    parts = str.split('/'),
    id = str.match(/\/(\d+)\//)[1],
    age = str.match(/\/(\d+)$/)[1];
console.log(id,age);

JS Fiddle demo

参考文献:

答案 1 :(得分:0)

如果你有非常量模式,你的模式是“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"}