2016-01-28 2 views
1

Я использую метод выделения для обозначения слов в текстах. Итак, моя проблема заключается в том, что я пытаюсь выделить маленькие слова, которые могут быть «под-словами», чем другие. Напр .:Установить рельсы выделить только целые слова

highlight("a estimativa de tempo", ["tim", "oi"]) 

И возвращается выделить:

"a es<mark>tim</mark>ativa de tempo" 

Но я нужен метод выделения, чтобы соответствовать только целые слова. Напр .:

highlight("a operadora tim", ["tim", "oi"]), returning: 
"a operadora <mark>tim</mark>" 

highlight("Oi anuncia", ["tim", "oi"]), returning: 
"a operadora <mark>tim</mark>" 

highlight("Operadora Tim declara", ["tim", "oi"]), returning: 
"Operadora <mark>Tim</mark> declara" 

ответ

0

Я буду рекомендовать @ метод заваренного слишком, но я хотел бы сделать одно небольшое изменение:

highlight("this Is a test", [/\bis\b/i]) 
=> "this <mark>Is</mark> a test" 

Таким способом без учета регистра и подходит все случаи образца.

+0

спасибо, @hattenn! Я попробовал что-то подобное, и эта ошибка появляется. TypeError - нет неявного преобразования Regexp в String: actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in escape 'actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in block in highlight 'actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in map' actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in highlight '... –

+0

@LuanSantos, я проверил документацию, а функциональность RegExp добавлена ​​в версию 4.2.1, проверьте документы: http://apidock.com/rails/v4.1.8/ActionView/Helpers/TextHelper/highlight. Есть ли вероятность, что вы сможете обновить версию своего рельса? – hattenn

+0

Спасибо, @hattenn! Я обновил рельсы, но теперь метод выделения не соответствует словам. Я использую вот так: 'text_marked = highlight (article.text, @ keywords.map {| k |/\ b # {k} \ b/i})' Где @keywords - это массив со словами: выделить в тексте. Что-то не так с этим использованием? –

0

Помощник изюминки принимает регулярные выражения для спичечных фраз, так что вы можете обернуть каждую фразу в \ Ь, которая является нулевой длиной границы слова согласовани:

highlight("this is a test", [/\bis\b/]) 
=> "this <mark>is</mark> a test" 

Вы будете обратите внимание, что выделено только отдельное слово «is», а не «находится» в слове «это».

+0

Большое спасибо, @infused! Я попробовал что-то подобное, и эта ошибка появляется. ТипError - неявное преобразование Regexp в String: actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in 'escape ' actionview (4.1.1) lib/action_view/helpers/text_helper. rb: 126: in 'block in highlight ' actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in' map' actionview (4.1.1) lib/action_view/helpers/text_helper.rb: 126: in 'highlight ' ... –

+0

Поддержка regexp-фраз была добавлена ​​в rails-4.2.0, поэтому вам нужно будет обновить Rails, прежде чем вы сможете использовать этот метод. – infused

+0

Спасибо, @infused! Я обновил рельсы, но теперь метод выделения не соответствует словам. Я использую вот так: 'text_marked = highlight (article.text, @ keywords.map {| k |/\ b # {k} \ b/i})' Где @keywords - это массив со словами: выделить в тексте. Что-то не так с этим? –

Смежные вопросы