javascript - javascript中的匹配和替换子字符串问题

标签 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 等找到子字符串匹配...

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

最佳答案

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/

关于javascript - javascript中的匹配和替换子字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064964/

相关文章:

python - Python中的格式化字符串和命名参数

javascript - 使用什么作为图像的悬停效果?

javascript - 如何使用javascript从couchdb获取数据

php - 在 Laravel 中使用 Eloquent ORM 使用 'not regexp' 执行数据库搜索

c# - EF 数据注释正则表达式

php - 优化远程页面检索和解析

javascript - 命名函数表达式和函数声明有什么区别?

JavaScript 重构/避免重复

python - 如何在 python 中检查命令行参数是否为文件?

R 函数,访问参数名称