正则如何匹配特定字符之间的值?

let str5 = "select count(order_id)  as count_order_id,sum(amount)  as sum_amount,count(a1) as count_a1,count(a2) as count_a2 from aaa  where   date='2019-09-10'"

匹配代码中的 count_order_idsum_amountcount_a1count_a2

匹配的规则:as语句后面的字段,以as 开始,以 from或,或 ,结束。
并且必须是as在前

阅读 3.4k
3 个回答
str5.match(/(?<=as\s+)\w+(?=(,|,|\s+from))/g)

使用反向肯定预查正向肯定预查可以很好的解决这个需求

str5.match(/(?<=\bas\s+).+?(?=\s+from|,|,)/g);
//["count_order_id", "sum_amount", "count_a1", "count_a2"]

但是反向肯定预查在ES2018中才被纳用,所以浏览器支持并不是很好(如IE)

向下兼容浏览器,我们可以把as也匹配出来,再处理

let result = str5.match(/\bas\s+.+?(?=\s+from|,|,)/g);
result = result ? result.map(item => item.replace(/^\bas\s+/, '')) : result;
//["count_order_id", "sum_amount", "count_a1", "count_a2"]
str.match(/\w+(?=\s*(?:,|from\b))/img);