Make whole-word filter regex consistent between Ruby and JS (#7987)
This commit is contained in:
		
							parent
							
								
									1ca4e51eb3
								
							
						
					
					
						commit
						20fefdb714
					
				
					 2 changed files with 14 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -47,7 +47,18 @@ export const regexFromFilters = filters => {
 | 
			
		|||
 | 
			
		||||
  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');
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -200,10 +200,11 @@ class FeedManager
 | 
			
		|||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue