Javascript 冒号后面的regex捕获绑定参数

Javascript 冒号后面的regex捕获绑定参数,javascript,regex,Javascript,Regex,我试图匹配冒号后面的子字符串:而不匹配冒号。它应该非常简单。给定 select * from table where name=:name, id = :id order by :order_by limit :limit 应该匹配 name id order_by limit 然而,它是匹配的 :name :id :order_by :limit 我使用的正则表达式是 :([a-zA-Z0-9_]+) 但我也试过了 (?::)([a-zA-Z0-9_]+) 根据 有人能帮我吗?你只需

我试图匹配冒号后面的子字符串:而不匹配冒号。它应该非常简单。给定

select * from table where name=:name, id = :id order by :order_by limit :limit
应该匹配

name
id
order_by
limit
然而,它是匹配的

:name
:id
:order_by
:limit
我使用的正则表达式是

:([a-zA-Z0-9_]+)
但我也试过了

(?::)([a-zA-Z0-9_]+)
根据

有人能帮我吗?

你只需要“回头看看”:


(?您的正则表达式应该可以工作。假设您使用的是JavaScript,您可以在
匹配项
数组中收集这样的结果:

var myRe = /:(\w+)/g;
var str = "select * from table where name=:name, id = :id order by :order_by limit :limit";
var matches = [];
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  matches.push(myArray[1]);
}
见:


myArray
是一个数组,包含整个匹配项(例如:“:name”)及其所有括号内的子字符串匹配项(如果有的话)(例如“name”)。因此使用
myArray[1]
只收集括号内的匹配项。

未捕获的括号仍用于表示
$0
或完全匹配项,即

:name
+---+ 0
 +--+ 1
您可能希望对这些占位符执行替换,因此我将通过使用替换函数来解决缺少后视功能的问题:

var bound = {
    name: 'test',
    id: 'world',
    order_by: 'col',
    limit: 123
},
sql = 'select * from table where name=:name, id = :id order by :order_by limit :limit';

sql.replace(/:(\w+)/g, function($0, $1) {
    // TODO apply escaping
    return bound[$1]; // perform lookup using 'name', 'id', etc.
});
// "select * from table where name=test, id = world order by col limit 123"

您是如何使用它的(以及使用哪种语言)?您似乎没有从结果中提取捕获组,但只得到所有(全部)匹配项的列表-您拥有的正则表达式都应该与@Bergi一致,正则表达式是可以的,它匹配:(某物)您需要提取组,即().OP似乎使用JavaScript,而lookbehind不受支持:-(亲爱的downvoter。JavaScript标记最近才添加到问题中,但对MDN的引用一直存在。这也解释了为什么我只得到一个结果:]
var bound = {
    name: 'test',
    id: 'world',
    order_by: 'col',
    limit: 123
},
sql = 'select * from table where name=:name, id = :id order by :order_by limit :limit';

sql.replace(/:(\w+)/g, function($0, $1) {
    // TODO apply escaping
    return bound[$1]; // perform lookup using 'name', 'id', etc.
});
// "select * from table where name=test, id = world order by col limit 123"