I'm fine with this for now. What we really want is for each type to define it's own pattern, but that'd take a little annoying work plugging that all together. It'd be something like

`'((property:)?' + property_re + ')|(' + 'location:' + location_re + ')'...`

except constructed in a loop from whatever. Since this adds a layer of indirection that's difficult to reason with, it's not clearly better unless it's done really well.