return new RegExp(filters.map(filter => {
let expr = escapeRegExp(filter.get('phrase'));
- return filter.get('whole_word') ? `\\b${expr}\\b` : expr;
+
+ if (filter.get('whole_word')) {
+ if (/^[\w]/.test(expr)) {
+ expr = `\\b${expr}`;
+ }
+
+ if (/[\w]$/.test(expr)) {
+ expr = `${expr}\\b`;
+ }
+ }
+
+ return expr;
}).join('|'), 'i');
};
active_filters = Rails.cache.fetch("filters:#{receiver_id}") { CustomFilter.where(account_id: receiver_id).active_irreversible.to_a }.to_a
active_filters.select! { |filter| filter.context.include?(context.to_s) && !filter.expired? }
+
active_filters.map! do |filter|
if filter.whole_word
sb = filter.phrase =~ /\A[[:word:]]/ ? '\b' : ''
- eb = filter.phrase =~ /[[:word:]]\Z/ ? '\b' : ''
+ eb = filter.phrase =~ /[[:word:]]\z/ ? '\b' : ''
/(?mix:#{sb}#{Regexp.escape(filter.phrase)}#{eb})/
else