我有这个字符串(分面搜索查询):
var q = ":salesRevenue:brand:Tchelicon:brand:Eurocom
:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik
:brand:Midas:brand:Bugera
:brand:Tcelectronic
:eligibleProduct:0010000066:publicProduct:false:brand:Behringer:productFilter:All:";
我想将它拆分为三个单独的字符串:q_brand,q_pubs和q_product,我的客户端希望在Regex中使用它。
q_brand包含值前面带有"品牌的值:"仅
q_pubs是前面带有" qualifiedProduct的值:"和" publicProduct:"。
q_product是以" productFilter:"开头的值。
我希望能够捕捉到它们,即使它们交换位置(例如:品牌:Behringer的位置:)
预计最终结果为:
var q_brand = "brand:Tchelicon:brand:Eurocom
:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik
:brand:Midas:brand:Bugera
:brand:Tcelectronic:brand:Behringer";
var q_pubs = "eligibleProduct:0010000066:publicProduct:false";
var q_product = "productFilter:All";
我尝试在(brand:.+:)
上使用brand:apple:brand:orange:product:hello:brand:grain:
作为一个实例和其他几个实例,但却得到了意想不到的结果。
答案 0 :(得分:0)
你非常接近 - 你尝试的主要问题是你在比赛中加入了尾随冒号,这会干扰以后的比赛。
一般模式是(foo:[^:]+)/g)
- 这将匹配一个字段名" foo",后面跟一个冒号,后跟任何不是冒号的字符大于零的数字,反复。然后将结果连接起来(再次使用冒号)以适合您想要的输出。
对于q_pub
你有两个不同的字段名,所以推广到" \ w + Product" (匹配产品后跟任意数量的字母字符。)
var q = ":salesRevenue:brand:Tchelicon:brand:Eurocom:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik:brand:Midas:brand:Bugera:brand:Tcelectronic:eligibleProduct:0010000066:publicProduct:false:brand:Behringer:productFilter:All:";
var q_brands = q.match(/(brand:[^:]+)/g).join(":");
var q_pub = q.match(/(\w+Product:[^:]+)/g).join(":");
var q_products = q.match(/(productFilter:[^:]+)/g).join(":");
console.log(q_brands);
console.log(q_pub);
console.log(q_products);