【问题标题】:match and replace substring issue in javascriptjavascript中的匹配和替换子字符串问题
【发布时间】:2014-06-05 16:03:11
【问题描述】:

所以我有以下代码

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'”,我的目标是获得没有 % 的匹配项,以便我可以在参数数组中使用它(即 arguments[$1]),但是我所做的一切'已尝试返回 'undefined',因为它似乎正在寻找参数 [%1] 或参数 [%2]。

为什么第一组代码返回错误的值,而第二组没有?我的印象是可以使用 $1、$2 等找到子字符串匹配项...

PS 抱歉,如果我没有很好地解释这一点。

【问题讨论】:

    标签: javascript regex arguments substring


    【解决方案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/

    【讨论】:

    • 谢谢,太好了!但我仍然不太明白为什么在一个示例中它将变量返回为“%1”和“%2”,而在另一个示例中它返回替换“1”和“2”?
    • 替换函数的第一个参数是引起替换的字符串。第二个参数是包含[第一个]匹配的那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2014-08-14
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多