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"