在javascript中匹配并替换substring问题

时间:2014-06-05 16:03:11

标签: javascript regex arguments substring

所以我有以下代码

function format(){
  return arguments[0].replace(
        /%([0-9])/g,
    function($1){alert($1)}
    )

}

var sql=format("SELECT * FROM %1 WHERE id='%2' ", table, id);

var table= "table1";
var id = "F1542";

这会警告“%1”和“%2”,但如果我运行此代码:

function format(){
  return arguments[0].replace(
        /%([0-9])/g,
        "$1"
    )

}

var sql=format("SELECT * FROM %1 WHERE id='%2' ", table, id);

alert(sql);

我得到“SELECT * FROM 1 WHERE id ='2'”,我的目的是获得没有%的匹配,以便我可以在参数数组中使用它(即参数[$ 1]),但是我所有的一切'尝试已经返回'未定义',因为它似乎在寻找参数[%1]或参数[%2]。

为什么第一组代码返回错误的值,但第二组却没有?我的印象是子串匹配可以通过使用$ 1,$ 2等来找到......

如果我没有很好地解释这个问题,请抱歉。

1 个答案:

答案 0 :(得分:1)

replace()将返回修改后的字符串(不是匹配项)。在第一个示例中,您将函数定义为参数并警告找到的变量。您可以使用match()来获取仅匹配的集合,或者如果您将两个示例组合在一起,则可以得到以下内容:

function format(){
    var args = Array.prototype.slice.call(arguments, 0);
    var sql = args[0];
    return sql.replace(
        /%([0-9])/g,
        function(matchVar,matchVal){
            return args[matchVal];
        });

}

replacer功能中的第二个参数是第一个匹配的匹配值。您可以将该值用作参数数组的索引。

http://jsfiddle.net/N6S4Q/