Goal: Be able to write exclusive select statements instead of an inclusive one
ruleset a60x489 {
meta {
name "exclusive-selection-expressions"
description <<
exclusive-selection-expressions
>>
author "Mike Grace"
logging on
}
rule run_everywhere_on_stackoverflow {
select when pageview "stackoverflow\.com"
{
notify("Welcome to Stackoverflow","") with sticky = true;
}
}
rule run_on_question_pages_but_not_when_asking {
select when pageview "stackoverflow\.com/questions/(?!ask)"
{
notify("Questions!","but not asking one") with sticky = true;
}
}
}
- 12 selects on any URL containing ‘stackoverflow.com’
- 19 selects on any URL containing ‘stackoverflow.com/questions/’ but only if that is not immediately followed by ‘ask’
App run on stackoverflow.com with bookmarklet
App run on a question detail page on stackoverflow.com with a bookmarklet
App run on ask a new question page on stackoverflow.com with a bookmarklet
- Selection expressions for pageview events are currently compiled into regular expressions and then executed for matches
- Exclusion was accomplished using a zero-width negative lookahead
Get the bookmarklet to try it out yourself!
Gratuitous day 9 crazy face

Update: 12/16/2010
I recently used this to fix one of my Kynetx apps.
The ruleset had a rule with a .* select statement
select when pageview ".*"
Problem was that doing a .* meant that it was running on my WordPress admin page which was causing some conflicts with the visual editor. To not run the rule on any WordPress admin page I changed the selection expression to use a zero width negative look ahead.
select when pageview ".*(?!wp-admin).*"
The app behaves just as before but no longer runs on any of my WordPress admin pages.


